【问题标题】:Combine duplicate rows to output a single row合并重复行以输出单行
【发布时间】:2016-03-23 19:49:05
【问题描述】:

我有一张用于票务系统的表格,其中包含以下列;

order<string> startDate<datetime> endDate<datetime>

大多数行不会根据“订单”列重复,但是在“订单”从一天跨越到下一天的情况下,它被分成 2 个订单,第一个的 endDate 为下午 5 点(结束天),第二天的 startDate 为上午 8 点(一天的开始)。根据需要,它们对应的开始和结束日期。 有些订单的长度可能超过 2 天,因此会被分成 >2 行。

例子

order startDate endDate
1 2016-03-29 11:00:53.000 2016-03-29 17:00:53.000
1 2016-03-30 08:00:53.000 2016-03-30 12:48:53.000
2 2016-03-30 10:17:53.000 2016-03-30 13:08:53.000

would transform to 
1 2016-03-29 11:00:53.000 2016-03-30 12:48:53.000
2 2016-03-30 10:17:53.000 2016-03-30 13:08:53.000

我需要合并所有行来给我一个包含开始和结束的唯一“订单”ID 的表格。即具有重复项的最低开始日期和重复项的最高结束日期的行。

我计划通过创建一个新表并填充它来做到这一点,并且可以根据某个值选择 1 个重复行,但不确定如何根据多行的值创建一个新行。

【问题讨论】:

    标签: sql sql-server duplicates


    【解决方案1】:
    SELECT order, MIN(startDate), MAX(endDate)
    FROM your_table_name
    GROUP BY order
    

    可能没有必要为此创建一个新表 - GROUP BY 查询在生产使用中非常很常见,并且简单地运行它并没有固有的危害查询以在需要时获得所需的结果。

    【讨论】:

    • 感谢 VoteyDisiple。我出于不相关的原因将它们移动到另一个表 - 除了将消费者引导到正确的表之外,我不拥有传输脚本。我知道我知道,但这会为以后而战;)
    猜你喜欢
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2018-08-06
    • 1970-01-01
    • 2012-07-15
    • 2014-03-12
    • 2021-01-11
    相关资源
    最近更新 更多