2016-12-07 25 views
0

這是來自餐館的銷售點數據的示例:一天中一個人支票打開和關閉的時間。我試圖找出當一個人關閉支票並打開另一個支票(基本上是他們沒有每天打開支票的時間)之間的差距。我正在使用Lead函數,但這並沒有說明在別人之後打開了一個支票,而是比其他人更早關閉(chk_num 499就是一個很好的例子)。我可以通過手動檢查這些數據來判斷是否有從14:27:35到14:29:14.000和從16:01:12.000到16:59:22.000沒有打開的檢查,但我不知道該怎麼辦它會自動跨越較大的數據集。試圖在兩個單獨的列和單獨的行之間找到時間之間的差距

我在SQL Server 2012上使用SQL Server Management Studio 11.0.2100.60來編寫此查詢。

對不起,格式如下。我無法找到如何插入簡單表格的好解釋。

<table><tbody><tr><th>chk_num</th><th>employee</th><th>chkstarttm</th><th>chkendtm</th></tr><tr><td>473</td><td>20106</td><td>2013-05-15 12:26:44.000</td><td>2013-05-15 13:21:58.000</td></tr><tr><td>480</td><td>20106</td><td>2013-05-15 12:38:17.000</td><td>2013-05-15 13:49:07.000</td></tr><tr><td>483</td><td>20106</td><td>2013-05-15 12:45:54.000</td><td>2013-05-15 14:27:35.000</td></tr><tr><td>484</td><td>20106</td><td>2013-05-15 12:46:19.000</td><td>2013-05-15 14:09:52.000</td></tr><tr><td>495</td><td>20106</td><td>2013-05-15 13:19:58.000</td><td>2013-05-15 14:10:02.000</td></tr><tr><td>499</td><td>20106</td><td>2013-05-15 13:30:38.000</td><td>2013-05-15 13:56:58.000</td></tr><tr><td>503</td><td>20106</td><td>2013-05-15 13:40:01.000</td><td>2013-05-15 14:11:47.000</td></tr><tr><td>515</td><td>20106</td><td>2013-05-15 14:29:14.000</td><td>2013-05-15 14:40:25.000</td></tr><tr><td>517</td><td>20106</td><td>2013-05-15 14:32:32.000</td><td>2013-05-15 16:01:12.000</td></tr><tr><td>522</td><td>20106</td><td>2013-05-15 14:34:57.000</td><td>2013-05-15 14:41:31.000</td></tr><tr><td>521</td><td>20106</td><td>2013-05-15 14:34:57.000</td><td>2013-05-15 15:03:02.000</td></tr><tr><td>523</td><td>20106</td><td>2013-05-15 14:34:57.000</td><td>2013-05-15 15:02:32.000</td></tr><tr><td>519</td><td>20106</td><td>2013-05-15 14:34:57.000</td><td>2013-05-15 14:40:56.000</td></tr><tr><td>520</td><td>20106</td><td>2013-05-15 14:34:57.000</td><td>2013-05-15 14:41:53.000</td></tr><tr><td>525</td><td>20106</td><td>2013-05-15 15:00:17.000</td><td>2013-05-15 15:27:55.000</td></tr><tr><td>535</td><td>20106</td><td>2013-05-15 15:27:13.000</td><td>2013-05-15 15:43:48.000</td></tr><tr><td>536</td><td>20106</td><td>2013-05-15 15:29:54.000</td><td>2013-05-15 15:30:56.000</td></tr><tr><td>537</td><td>20106</td><td>2013-05-15 15:41:06.000</td><td>2013-05-15 15:41:42.000</td></tr><tr><td>548</td><td>20106</td><td>2013-05-15 16:59:22.000</td><td>2013-05-15 18:04:47.000</td></tr><tr><td>551</td><td>20106</td><td>2013-05-15 17:04:35.000</td><td>2013-05-15 18:29:35.000</td></tr><tr><td>564</td><td>20106</td><td>2013-05-15 18:03:22.000</td><td>2013-05-15 19:35:51.000</td></tr></tbody></table>

回答

1

這裏是一個解決方案,我相信你可以使用:

--Generated Output   
    StartRange      EndRange 
    2013-05-15 14:27:35.000   2013-05-15 14:29:14.000 
    2013-05-15 16:01:12.000   2013-05-15 16:59:22.000 

    DECLARE @CheckData AS TABLE 
    (
     CheckNum INT, 
     EmployeeNum INT, 
     StartDate DATETIME, 
     EndDate DATETIME 
    ) 

    INSERT INTO @CheckData VALUES ('473', '20106', '2013-05-15 12:26:44.000', '2013-05-15 13:21:58.000') 
    INSERT INTO @CheckData VALUES ('480', '20106', '2013-05-15 12:38:17.000', '2013-05-15 13:49:07.000') 
    INSERT INTO @CheckData VALUES ('483', '20106', '2013-05-15 12:45:54.000', '2013-05-15 14:27:35.000') 
    INSERT INTO @CheckData VALUES ('484', '20106', '2013-05-15 12:46:19.000', '2013-05-15 14:09:52.000') 
    INSERT INTO @CheckData VALUES ('495', '20106', '2013-05-15 13:19:58.000', '2013-05-15 14:10:02.000') 
    INSERT INTO @CheckData VALUES ('499', '20106', '2013-05-15 13:30:38.000', '2013-05-15 13:56:58.000') 
    INSERT INTO @CheckData VALUES ('503', '20106', '2013-05-15 13:40:01.000', '2013-05-15 14:11:47.000') 
    INSERT INTO @CheckData VALUES ('515', '20106', '2013-05-15 14:29:14.000', '2013-05-15 14:40:25.000') 
    INSERT INTO @CheckData VALUES ('517', '20106', '2013-05-15 14:32:32.000', '2013-05-15 16:01:12.000') 
    INSERT INTO @CheckData VALUES ('522', '20106', '2013-05-15 14:34:57.000', '2013-05-15 14:41:31.000') 
    INSERT INTO @CheckData VALUES ('521', '20106', '2013-05-15 14:34:57.000', '2013-05-15 15:03:02.000') 
    INSERT INTO @CheckData VALUES ('523', '20106', '2013-05-15 14:34:57.000', '2013-05-15 15:02:32.000') 
    INSERT INTO @CheckData VALUES ('519', '20106', '2013-05-15 14:34:57.000', '2013-05-15 14:40:56.000') 
    INSERT INTO @CheckData VALUES ('520', '20106', '2013-05-15 14:34:57.000', '2013-05-15 14:41:53.000') 
    INSERT INTO @CheckData VALUES ('525', '20106', '2013-05-15 15:00:17.000', '2013-05-15 15:27:55.000') 
    INSERT INTO @CheckData VALUES ('535', '20106', '2013-05-15 15:27:13.000', '2013-05-15 15:43:48.000') 
    INSERT INTO @CheckData VALUES ('536', '20106', '2013-05-15 15:29:54.000', '2013-05-15 15:30:56.000') 
    INSERT INTO @CheckData VALUES ('537', '20106', '2013-05-15 15:41:06.000', '2013-05-15 15:41:42.000') 
    INSERT INTO @CheckData VALUES ('548', '20106', '2013-05-15 16:59:22.000', '2013-05-15 18:04:47.000') 
    INSERT INTO @CheckData VALUES ('551', '20106', '2013-05-15 17:04:35.000', '2013-05-15 18:29:35.000') 
    INSERT INTO @CheckData VALUES ('564', '20106', '2013-05-15 18:03:22.000', '2013-05-15 19:35:51.000') 

    SELECT * 
    FROM 
     (
      SELECT MAX(enddate) OVER(ORDER BY startdate) StartRange, 
      lead(startdate) OVER(ORDER BY startdate) EndRange 
      FROM @Checkdata 
     ) AS c 
    WHERE c.StartRange < c.EndRange 
+0

謝謝。這似乎是我需要的。 –