【问题标题】:Calculate the difference from the minimum value within a group计算组内最小值的差值
【发布时间】:2016-10-30 07:40:07
【问题描述】:

给定下表:

| id|    Date    |

| 1 | 04-01-2016 |
| 1 | 04-07-2016 |
| 1 | 04-09-2016 |
| 2 | 04-06-2016 |
| 2 | 04-03-2016 |
| 2 | 04-10-2016 |

我想要一个列,其中包含每天与 id 分组中的最短天数之间的天数。

 id  |   date     |  day_count 
  ---+------------+------------
   1 | 04-01-2016 |     0 (days between 04-01-2016 and 04-01-2016)
   1 | 04-04-2016 |     3 (days between 04-04-2016 and 04-01-2016)
   1 | 04-08-2016 |     7 
   2 | 04-17-2016 |     14 (days between 04-017-2016 and 04-03-2016)
   2 | 04-03-2016 |     0
   2 | 04-10-2016 |     7

【问题讨论】:

    标签: sql postgresql group-by aggregate


    【解决方案1】:

    通过使用Window Function和Datediff,我们可以得到以下结果

    DECLARE @Table1  TABLE 
        (id int, date datetime)
    ;
    
    INSERT INTO @Table1
        (id, date)
    VALUES
        (1, '2016-04-01 05:30:00'),
        (1, '2016-04-04 05:30:00'),
        (1, '2016-04-08 05:30:00'),
        (2, '2016-04-03 05:30:00'),
        (2, '2016-04-17 05:30:00'),
        (2, '2016-04-20 05:30:00')
    ;
    

    脚本

     select  *
    ,       datediff(day, min(Date) over (partition by [ID]), Date)Cnt
    from    @Table1
    

    【讨论】:

    • 感激不尽!附言。如何在stackoverflow中将上表格式化为可读格式?
    • 在编辑框中我们有 {} Code Format 选项,只需选择所需的并点击它
    • @labrynth 我认为现在你有资格勾选标记和投票答案
    • @labrynth 如果答案有助于解决您的问题,请保留它,因为 TICK MARK 表示有效答案(右标记)
    猜你喜欢
    • 2021-06-03
    • 2015-08-31
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2011-10-27
    • 1970-01-01
    • 2017-03-04
    相关资源
    最近更新 更多