【发布时间】: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
标签: mysql sql datetime max greatest-n-per-group