Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将日期的最小值和最大值返回到一个带条件的列中_Sql_Sql Server - Fatal编程技术网

Sql 将日期的最小值和最大值返回到一个带条件的列中

Sql 将日期的最小值和最大值返回到一个带条件的列中,sql,sql-server,Sql,Sql Server,我的数据如下所示: ID_DATA | DATE -------------------- 1101 | 2020-02-01 1101 | 2020-02-02 1101 | 2020-02-03 1102 | 2020-02-01 1102 | 2020-02-01 我想要的是,在类似的ID\u数据下,将有一列显示连接的日期范围,作为字符串“MIN(date)-MAX(date)”。但是,如果在相似的ID\u数据下,日期是相似的,它将只按原样显示日期 请注意,

我的数据如下所示:

ID_DATA | DATE
--------------------
1101    | 2020-02-01
1101    | 2020-02-02
1101    | 2020-02-03
1102    | 2020-02-01
1102    | 2020-02-01
我想要的是,在类似的ID\u数据下,将有一列显示连接的日期范围,作为字符串“MIN(date)-MAX(date)”。但是,如果在相似的ID\u数据下,日期是相似的,它将只按原样显示日期

请注意,单个ID\u数据可能有两行以上的DATE。我希望在需要时使用case

预期结果如下:

ID_DATA DATE
1101    2020-02-01 - 2020-02-03
1102    2020-02-01
尝试此选项:

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;
选择
ID_数据,
转换(varchar,最小值(日期),111)+
最小(日期)小于最大(日期)时的情况
然后'-'+转换(varchar,MAX(DATE),111)
否则“”将以日期结束
从你的桌子上
分组
ID_数据;

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

您可以使用
min()
max()
函数尝试以下操作

WITH cte (
    ID_DATA
    ,MinDate
    ,MaxDate
    )
AS (
    SELECT ID_DATA
        ,Min(DtDATE) AS MinDate
        ,Max(DtDATE) AS MaxDate
    FROM TblData
    GROUP BY ID_DATA
    )
SELECT ID_DATA
    ,CASE 
        WHEN MinDate = MaxDate
            THEN Convert(VARCHAR(10), MinDate)
        ELSE Convert(VARCHAR(10), MinDate) + ' - ' + Convert(VARCHAR(10), MaxDate)
        END AS DatePeriod
FROM cte

这是现场演示。

hi@Tim我试过了,但显示错误。我已经在上面发布了我的示例查询。你能帮我怎么写你的代码吗?感谢这不是您之前所问的,并且与示例数据和预期输出不匹配。我们需要所有相关表的脚本来测试查询是否在语法检查中通过,运行并给出预期的输出。您能帮我告诉代码放在哪里吗,?因为在查询中加入后,我只需要表C中的ID_提升和BL_日期数据。。我试图在基于该ID的情况下说明问题,但总是失败