返回行中的mysql Max(date)值[重复]

Posted

技术标签:

【中文标题】返回行中的mysql Max(date)值[重复]【英文标题】:mysql Max(date) value in returned rows [duplicate] 【发布时间】:2021-03-25 08:54:57 【问题描述】:

查询时在mytable中

SELECT * FROM mytable WHERE adsh='0000002178-18-000009' and tag='assets'

我得到了这个结果

adsh tag ddate value0000002178-18-000009 Assets 2016-12-31 246872000.000000002178-18-000009 Assets 2017-12-31 282704000.00

但我希望只返回包含 max(ddate) 的行,即 2017-12-31 行注意还有许多其他不同的标签。但由于该表包含 >100k 行,因此我希望确保在将其扩展到所有行之前进行正确的查询。

我尝试了许多不同的查询和变体,但没有雪茄:/

SELECT *,max(ddate) FROM mytable WHERE adsh='0000002178-18-000009' and tag='Assets'

返回错误的行

SELECT * FROM mytable
WHERE ddate = (select max(ddate) and adsh='0000002178-18-000009' and tag='Assets' from mytable)

返回 0 行

SELECT * FROM mytable
WHERE ddate = (select max(ddate) and adsh='0000002178-18-000009' and tag='Assets' from mytable)

返回 0 行

SELECT DISTINCT adsh,tag,ddate,value from mytable
WHERE ddate = (select max(ddate) from mytable) group by adsh 

但这也不是我期望的结果

有谁知道我怎样才能做到这一点?

谢谢一百万:)

【问题讨论】:

对于一个明确的标签,使用简单的SELECT * FROM mytable WHERE adsh='0000002178-18-000009' AND tag='assets' ORDER BY dddate DESC LIMIT 1 【参考方案1】:

你似乎想要:

select * 
from mytable
where ddate = (
    select max(ddate) 
    from mytable
    where adsh='0000002178-18-000009' and tag='Assets' 
)

通过重复外部查询的where 子句中的条件,您会得到更准确的结果:

select * 
from mytable
where adsh = '0000002178-18-000009' and tag = 'Assets'  and ddate = (
    select max(ddate) 
    from mytable
    where adsh = '0000002178-18-000009' and tag = 'Assets' 
)

以防万一,让我指出,如果您确定没有***关系,使用limit 可以更简单地完成:

select * 
from mytable
where adsh = '0000002178-18-000009' and tag = 'Assets'
order by dddate desc limit 1

最后:如果你运行的是 mysql 8.0,你也可以使用窗口函数:

select *
from (
    select t.*,
        rank() over(order by ddate desc) as rn
    from mytable t
    where adsh = '0000002178-18-000009' and tag = 'Assets'
) t
where rn = 1

【讨论】:

谢谢,我能在这篇文章的帮助下搞清楚 :) https://***.com/questions/28563100/return-corresponding-date-of-max-value

以上是关于返回行中的mysql Max(date)值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 MySQL 5.7 中获取最高分数和最高分数行中的字段 [重复]

如何使mysql查询从MAX(值)中选择数据而不是值?

如何从mysql列中存在的所有行中删除重复值[duplicate]

如何使用 case 语句中的函数返回值以选择每个函数的 MAX?

MySQL - 更新/设置一个表中的列等于另一个表中的 MAX 值

SQL Max() 返回多个值