选择所有行,但在新列中显示表中的最大值

时间:2014-02-03 05:36:16

标签: sql select max

我正在做一个选择,我想要突出显示最近日期的所有行。这不是每组,而是整个返回的表。

我仍然希望检索表中的所有行,无论它们是否为max,但我想确保我们可以找到表的最新值子集。最好是一个带有标志或实际值的新列。

我该怎么做?

当前表格(示例)

+----+-------------+
| Id | Date        |
+----+-------------+
|  1 | 1 Jan 2012  |
|  2 | 3 Jan 2012  |
|  3 | 2 Jan 2012  |
|  3 | 5 Jan 2012  |
|  4 | 5 Jan 2012  |
+----+-------------+

理想输出

+----+-------------+---------+
| Id | Date        | Latest? |
+----+-------------+---------+
|  1 | 1 Jan 2012  | no      |
|  2 | 3 Jan 2012  | no      |
|  3 | 2 Jan 2012  | no      |
|  3 | 5 Jan 2012  | yes     |
|  4 | 5 Jan 2012  | yes     |
+----+-------------+---------+

3 个答案:

答案 0 :(得分:0)

您可以使用MAX

加入表格
SELECT my_table.*, CASE WHEN date = max_date THEN 'yes' ELSE 'no' END AS latest
FROM   my_table
JOIN   (SELECT MAX(date) AS max_date FROM my_table) t -- Note it's only one row, no need for a join condition

答案 1 :(得分:0)

试试这个

SELECT ID,DATE,
       CASE WHEN DATE = (SELECT MAX(DATE) FROM TABLE1) Then 'YES' ELSE 'No' END LATEST
FROM TABLE1 T1 

FIDDLE DEMO

答案 2 :(得分:0)

尝试这个,我已将最大日期分开,因此它只获得一次最大日期并在主查询中使用它。

DECLARE @MaxDate As DateTime
SELECT @MaxDate = MAX(DATE) FROM TABLE1 

SELECT ID,
       DATE,
       CASE WHEN DATE = @MaxDate Then 'yes' ELSE 'no' END Lates
FROM TABLE1
ORDER BY ID, DATE