虽然这个问题看起来很简单,但它有点棘手。
我有一个包含以下列的表:
table A:
int ID
float value
datetime date
varchar(50) group
我想获取包含按“group”列分组的最大“date”的记录的“ID”和“value”。像“每个组的最新价值是什么?”
我可以得到每个小组及其最长日期:
SELECT group, MAX(date) FROM A GROUP BY group; -- I also need the "ID" and "value"
但我想拥有最高日期的记录的“ID”和值。
在A和结果之间建立联接可能是答案,但无法知道MAX(日期)引用的记录(如果“日期”重复)。
有人可以帮忙吗?
答案 0 :(得分:8)
您可以尝试使用子查询
select group, id, value, date from A where date in ( select MAX(date) as date from A group by group ) order by group
答案 1 :(得分:4)
这就是分析函数的用途:
select group,
id,
value
from (
select group,
id,
value,
date,
max(date) over (partition by group) max_date_by_group
from A
)
where date = max_date_by_group
答案 2 :(得分:2)
如果日期是唯一的,那么您已经有了答案。如果date不是唯一的,那么您需要一些其他的uniqueifier。如果没有自然密钥,您的身份证会就像任何身份一样好。只需将MAX(或MIN,无论哪种)放在上面:
SELECT *
FROM A
JOIN (
--Dedupe any non unqiue dates by getting the max id for each group that has the max date
SELECT Group, MAX(Id) as Id
FROM A
JOIN (
--Get max date for each group
SELECT group, MAX(date) as Date
FROM A
GROUP BY group
) as MaxDate ON
A.Group = MaxDate.Group
AND A.Date = MaxDate.Date
GROUP BY Group
) as MaxId ON
A.Group = MaxId.Group
AND A.Id= MaxId.Id
答案 3 :(得分:0)
只要Date列对每个组都是唯一的,我认为这样的事情可能会起作用:
SELECT A.ID, A.Value
FROM A
INNER JOIN (SELECT Group, MAX(Date) As MaxDate FROM A GROUP BY Group) B
ON A.Group = B.Group AND A.Date = B.MaxDate