3 回答
TA贡献1869条经验 获得超4个赞
SELECT group,MAX(date) as max_date
FROM table
WHERE checks>0
GROUP BY group
这可以获取最大日期..将其返回到您的数据以获取其他列:
Select group,max_date,checks
from table t
inner join
(SELECT group,MAX(date) as max_date
FROM table
WHERE checks>0
GROUP BY group)a
on a.group = t.group and a.max_date = date
内部联接用作仅获取最大记录的过滤器。
仅供参考,您的列名很恐怖,请不要在列(组,日期,表)中使用保留字。
TA贡献1789条经验 获得超10个赞
您可以像这样使用窗口 MAX():
SELECT
*,
max_date = MAX(date) OVER (PARTITION BY group)
FROM table
获取每个日期group以及其他数据的最大日期:
group date cash checks max_date
----- -------- ---- ------ --------
1 1/1/2013 0 0 1/3/2013
2 1/1/2013 0 800 1/1/2013
1 1/3/2013 0 700 1/3/2013
3 1/1/2013 0 600 1/5/2013
1 1/2/2013 0 400 1/3/2013
3 1/5/2013 0 200 1/5/2013
使用上面的输出作为派生表,然后您只能获得date匹配的行max_date:
SELECT
group,
date,
checks
FROM (
SELECT
*,
max_date = MAX(date) OVER (PARTITION BY group)
FROM table
) AS s
WHERE date = max_date
;
获得理想的结果。
基本上,这与@Twelfth的建议类似,但是避免了加入,因此可能更有效。
您可以在SQL Fiddle中尝试该方法。
- 3 回答
- 0 关注
- 737 浏览
添加回答
举报