从表格中选择信息,其中行具有最大日期

我的桌子看起来像这样:


group    date      cash  checks

  1    1/1/2013     0      0

  2    1/1/2013     0      800

  1    1/3/2013     0      700

  3    1/1/2013     0      600

  1    1/2/2013     0      400

  3    1/5/2013     0      200

-不需要现金就可以证明该表中有更多信息


我想获取日期最大且检查值大于0的每个唯一组。因此返回结果类似于:


group    date     checks

  2    1/1/2013    800

  1    1/3/2013    700

  3    1/5/2013    200

尝试的代码:


SELECT group,MAX(date),checks

    FROM table

    WHERE checks>0

    GROUP BY group

    ORDER BY group DESC

问题是,它为我提供了所有日期和支票,而不仅仅是最大日期行。


使用MS SQL Server 2005


sql -sql-server-2005 great-n-per-group


慕森王
浏览 680回答 3
3回答

MMTTMM

SELECT group,MAX(date) as max_dateFROM tableWHERE checks>0GROUP BY group这可以获取最大日期..将其返回到您的数据以获取其他列:Select group,max_date,checksfrom table tinner join (SELECT group,MAX(date) as max_dateFROM tableWHERE checks>0GROUP BY group)aon a.group = t.group and a.max_date = date内部联接用作仅获取最大记录的过滤器。仅供参考,您的列名很恐怖,请不要在列(组,日期,表)中使用保留字。

至尊宝的传说

您可以像这样使用窗口 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/20132      1/1/2013  0     800     1/1/20131      1/3/2013  0     700     1/3/20133      1/1/2013  0     600     1/5/20131      1/2/2013  0     400     1/3/20133      1/5/2013  0     200     1/5/2013使用上面的输出作为派生表,然后您只能获得date匹配的行max_date:SELECT  group,  date,  checksFROM (  SELECT    *,     max_date = MAX(date) OVER (PARTITION BY group)  FROM table) AS sWHERE date = max_date;获得理想的结果。基本上,这与@Twelfth的建议类似,但是避免了加入,因此可能更有效。您可以在SQL Fiddle中尝试该方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server