【问题标题】:Select all rows but show the max value from the table in a new column选择所有行,但在新列中显示表中的最大值
【发布时间】:2014-02-26 12:41:13
【问题描述】:

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

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

我该怎么做呢?

当前表(示例)

+----+-------------+
| 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     |
+----+-------------+---------+

【问题讨论】:

  • 说它是最新的还是不是最新的有什么依据?

标签: sql select max


【解决方案1】:

您可以通过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

【讨论】:

  • 't' 附近的语法不正确。:SELECT table1.*, CASE WHEN date = max_date THEN 'yes' ELSE 'no' END AS latest FROM table1 JOIN (SELECT MAX(date) AS max_date FROM table1 ) t
  • 你用的是什么关系型数据库?
【解决方案2】:

这样试试

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

FIDDLE DEMO

【讨论】:

    【解决方案3】:

    试试这个,我已经分离了最大日期,所以它只获取一次最大日期并在主查询中使用它。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 2021-07-23
      • 2022-01-14
      • 2021-07-23
      • 1970-01-01
      • 2012-08-12
      相关资源
      最近更新 更多