-3

您有三个字段 ID、日期和总计。您的表格包含同一天的多行,这是有效数据,但出于报告目的,您每天只需要显示一行。应该返回每天 ID 最高的行,其余的应该对用户隐藏(不返回)。为了更好地描绘下面的问题是示例数据和示例输出:

ID, Date, Total
1, 2011-12-22, 50
2, 2011-12-22, 150

正确的结果是:

2, 2012-12-22, 150

正确的输出是 2011-12-22 日期的单行,选择该行是因为它具有最高 ID (2>1)

4

7 回答 7

1
SELECT *
FROM table
WHERE ID IN ( SELECT MAX(ID)
              FROM table
              GROUP BY Date )
于 2012-09-04T06:39:12.153 回答
1

这将起作用。

SELECT  *
FROM    tableName a
            INNER JOIN
            (
                SELECT `DATE`, MAX(ID) maxID
                FROM tableName
                GROUP BY `DATE`
            ) b ON a.id = b.MaxID AND
                a.`date` = b.`date`

SQLFiddle 演示

于 2012-09-04T06:39:41.950 回答
1

假设您有一个支持窗口函数的数据库,并且该date列确实只是date(而不是datetime),那么类似于:

SELECT
    * --TODO - Pick columns
FROM
    (
       SELECT ID,[Date],Total,ROW_NUMBER() OVER (PARTITION BY [Date] ORDER BY ID desc) rn
       FROM [Table]
    ) t
WHERE
   rn = 1

应该每天产生一行 - 任何给定日期的选定行都是具有最高ID值的行。

于 2012-09-04T06:41:42.203 回答
0
Select MAX(ID),Data,Total from foo

对于 MySQL

于 2012-09-04T06:38:25.010 回答
0

大概

SELECT * FROM your_table ORDER BY ID DESC LIMIT 1
于 2012-09-04T06:38:45.177 回答
0

另一种简单的方法是

SELECT TOP 1 * FROM YourTable ORDER BY ID DESC

而且,我认为这是最简单的方法!

于 2012-09-20T06:26:59.240 回答
0
SELECT * FROM TABLE_SUM S WHERE S.ID = 
( 
SELECT MAX(ID) FROM TABLE_SUM
WHERE CDATE = GG.CDATE
GROUP BY CDATE 
) 
于 2014-03-07T19:58:03.377 回答