首页 > 解决方案 > 将日期的 Min-Max 值返回到具有条件的一列中

问题描述

我有如下所示的数据:

ID_DATA | DATE
--------------------
1101    | 2020-02-01
1101    | 2020-02-02
1101    | 2020-02-03
1102    | 2020-02-01
1102    | 2020-02-01

我想要的是,在类似的 ID_DATA下,会有一列将连接的日期范围显示为字符串' MIN(date) - MAX(date) '。但是如果在相似的ID_DATA下日期相似,它只会按原样显示DATE

请注意,单个ID_DATA的DATE可能超过 2 行。我希望使用 case-when。

以下预期结果:

ID_DATA DATE
1101    2020-02-01 - 2020-02-03
1102    2020-02-01

标签: sqlsql-server

解决方案


试试这个选项:

SELECT
    ID_DATA,
    CONVERT(varchar, MIN(DATE), 111) +
        CASE WHEN MIN(DATE) < MAX(DATE)
             THEN ' - ' + CONVERT(varchar, MAX(DATE), 111)
             ELSE '' END AS DATE
FROM yourTable
GROUP BY
    ID_DATA;

这里的逻辑是使用CASE表达式来检查 ID 的最小日期是否小于最大日期。如果是这样,那么我们显示上限,否则我们只报告最小日期。


推荐阅读