2017-08-28 51 views
0

我有一個SQL表用於保存所有更新到另一個表。每次更新其他表中的某個內容時,此Shadow表會從更新前的所有數據中獲取一個新行。它看起來像這樣:如何在SQL中第一次輸入日期?

+--------------------------------+-------------------------+-------------------------+--------------------------+ 
| cd_POLineItemScheduledShipDate |  CreatedOn  |  UpdatedOn  | _rescd_PurchaseOrderLine | 
+--------------------------------+-------------------------+-------------------------+--------------------------+ 
| 2017-08-18 00:00:00.000  | 2017-08-15 11:14:00.623 | 2017-08-24 14:49:45.850 | 037-01714223-REF-1  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:31.553 | 2017-08-24 14:48:52.287 | 037-01714223-REF-1  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:44.007 | 2017-08-24 14:48:45.927 | 037-01714223-REF-1  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:28.833 | 2017-08-24 14:48:39.287 | 037-01714223-REF-1  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:48.490 | 2017-08-24 14:48:32.847 | 037-01714223-REF-1  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:39.410 | 2017-08-24 14:48:26.253 | 037-01714223-REF-1  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:44.007 | 2017-08-24 14:47:56.753 | 037-01714223-REF-1  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:28.833 | 2017-08-24 14:47:56.723 | 037-01714223-REF-1  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:48.490 | 2017-08-24 14:47:56.660 | 037-01714223-REF-1  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:31.553 | 2017-08-24 14:47:56.630 | 037-01714223-REF-1  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:39.410 | 2017-08-24 14:47:56.567 | 037-01714223-REF-1  | 
| NULL       | 2017-08-15 11:14:00.623 | 2017-08-15 14:03:15.067 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:36.537 | 2017-08-14 12:45:13.103 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:45.363 | 2017-08-14 12:45:05.057 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:44.007 | 2017-08-14 12:44:58.027 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:28.833 | 2017-08-14 12:44:50.620 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:48.490 | 2017-08-14 12:44:43.387 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:31.553 | 2017-08-14 12:44:36.353 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:39.410 | 2017-08-14 12:44:28.450 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:40.113 | 2017-08-14 12:44:21.230 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:45.990 | 2017-08-14 12:44:13.730 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:41.240 | 2017-08-14 12:44:06.823 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:41.457 | 2017-08-14 12:43:59.370 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:37.553 | 2017-08-14 12:43:51.730 | 037-01714223-REF-1  | 
| NULL       | 2017-08-11 11:13:40.707 | 2017-08-14 12:43:44.527 | 037-01714223-REF-1  | 
| 2017-08-18 00:00:00.000  | 2017-08-15 11:14:00.623 | 2017-08-24 14:49:45.850 | 037-01714223-REF-2  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:31.553 | 2017-08-24 14:48:52.287 | 037-01714223-REF-2  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:44.007 | 2017-08-24 14:48:45.927 | 037-01714223-REF-2  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:28.833 | 2017-08-24 14:48:39.287 | 037-01714223-REF-2  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:48.490 | 2017-08-24 14:48:32.847 | 037-01714223-REF-2  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:39.410 | 2017-08-24 14:48:26.253 | 037-01714223-REF-2  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:44.007 | 2017-08-24 14:47:56.753 | 037-01714223-REF-2  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:28.833 | 2017-08-24 14:47:56.723 | 037-01714223-REF-2  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:48.490 | 2017-08-24 14:47:56.660 | 037-01714223-REF-2  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:31.553 | 2017-08-24 14:47:56.630 | 037-01714223-REF-2  | 
| 2017-08-18 00:00:00.000  | 2017-08-11 11:13:39.410 | 2017-08-24 14:47:56.567 | 037-01714223-REF-2  | 
| NULL       | 2017-08-15 11:14:00.623 | 2017-08-15 14:03:15.067 | 037-01714223-REF-2  | 
| NULL       | 2017-08-11 11:13:36.537 | 2017-08-14 12:45:13.103 | 037-01714223-REF-2  | 
| NULL       | 2017-08-11 11:13:45.363 | 2017-08-14 12:45:05.057 | 037-01714223-REF-2  | 
| NULL       | 2017-08-11 11:13:44.007 | 2017-08-14 12:44:58.027 | 037-01714223-REF-2  | 
| NULL       | 2017-08-11 11:13:28.833 | 2017-08-14 12:44:50.620 | 037-01714223-REF-2  | 
| NULL       | 2017-08-11 11:13:48.490 | 2017-08-14 12:44:43.387 | 037-01714223-REF-2  | 
| NULL       | 2017-08-11 11:13:31.553 | 2017-08-14 12:44:36.353 | 037-01714223-REF-2  | 
| NULL       | 2017-08-11 11:13:39.410 | 2017-08-14 12:44:28.450 | 037-01714223-REF-2  | 
+--------------------------------+-------------------------+-------------------------+--------------------------+ 

所以有2個不同的_rescd_PurchaseOrderLine數字。每一個都有幾行,其中cd_POLineItemScheduledShipDate有NULL,然後有幾行不爲空。

我試圖從該行的UpdatedOn日期與cd_POLineItemScheduledShipDate的第一個實例時,由UpdatedOn desc每個採購訂單行命令不是NULL(這是由UpdatedOn desc排序)。因此,對於下面的例子中我希望得到的結果是:

+-------------------------+--------------------------+ 
|  UpdatedOn  | _rescd_PurchaseOrderLine | 
+-------------------------+--------------------------+ 
| 2017-08-24 14:47:56.567 | 037-01714223-REF-1  | 
| 2017-08-24 14:47:56.567 | 037-01714223-REF-2  | 
+-------------------------+--------------------------+ 

我已經嘗試了一些事情joinsgroups和使用maxmin,但我只是沒有得到它。

如果有人能指出我在正確的方向,我將不勝感激!

回答

1

這應該是你以後......

IF OBJECT_ID('tempdb..#TestData', 'U') IS NOT NULL 
DROP TABLE #TestData; 

CREATE TABLE #TestData (
    RN INT NOT NULL IDENTITY(1,1), -- Need something to sort on that will hold the insert order... 
    cd_POLineItemScheduledShipDate DATETIME NULL, 
    CreatedOn DATETIME NOT NULL, 
    UpdatedOn DATETIME NOT NULL, 
    rescd_PurchaseOrderLine VARCHAR(20) NOT NULL 
    ); 
INSERT #TestData (cd_POLineItemScheduledShipDate, CreatedOn, UpdatedOn, rescd_PurchaseOrderLine) VALUES 
    ('2017-08-18 00:00:00.000', '2017-08-15 11:14:00.623', '2017-08-24 14:49:45.850', '037-01714223-REF-1'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:31.553', '2017-08-24 14:48:52.287', '037-01714223-REF-1'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:44.007', '2017-08-24 14:48:45.927', '037-01714223-REF-1'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:28.833', '2017-08-24 14:48:39.287', '037-01714223-REF-1'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:48.490', '2017-08-24 14:48:32.847', '037-01714223-REF-1'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:39.410', '2017-08-24 14:48:26.253', '037-01714223-REF-1'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:44.007', '2017-08-24 14:47:56.753', '037-01714223-REF-1'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:28.833', '2017-08-24 14:47:56.723', '037-01714223-REF-1'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:48.490', '2017-08-24 14:47:56.660', '037-01714223-REF-1'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:31.553', '2017-08-24 14:47:56.630', '037-01714223-REF-1'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:39.410', '2017-08-24 14:47:56.567', '037-01714223-REF-1'), 
    (NULL, '2017-08-15 11:14:00.623', '2017-08-15 14:03:15.067', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:36.537', '2017-08-14 12:45:13.103', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:45.363', '2017-08-14 12:45:05.057', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:44.007', '2017-08-14 12:44:58.027', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:28.833', '2017-08-14 12:44:50.620', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:48.490', '2017-08-14 12:44:43.387', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:31.553', '2017-08-14 12:44:36.353', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:39.410', '2017-08-14 12:44:28.450', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:40.113', '2017-08-14 12:44:21.230', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:45.990', '2017-08-14 12:44:13.730', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:41.240', '2017-08-14 12:44:06.823', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:41.457', '2017-08-14 12:43:59.370', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:37.553', '2017-08-14 12:43:51.730', '037-01714223-REF-1'), 
    (NULL, '2017-08-11 11:13:40.707', '2017-08-14 12:43:44.527', '037-01714223-REF-1'), 
    ('2017-08-18 00:00:00.000', '2017-08-15 11:14:00.623', '2017-08-24 14:49:45.850', '037-01714223-REF-2'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:31.553', '2017-08-24 14:48:52.287', '037-01714223-REF-2'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:44.007', '2017-08-24 14:48:45.927', '037-01714223-REF-2'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:28.833', '2017-08-24 14:48:39.287', '037-01714223-REF-2'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:48.490', '2017-08-24 14:48:32.847', '037-01714223-REF-2'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:39.410', '2017-08-24 14:48:26.253', '037-01714223-REF-2'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:44.007', '2017-08-24 14:47:56.753', '037-01714223-REF-2'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:28.833', '2017-08-24 14:47:56.723', '037-01714223-REF-2'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:48.490', '2017-08-24 14:47:56.660', '037-01714223-REF-2'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:31.553', '2017-08-24 14:47:56.630', '037-01714223-REF-2'), 
    ('2017-08-18 00:00:00.000', '2017-08-11 11:13:39.410', '2017-08-24 14:47:56.567', '037-01714223-REF-2'), 
    (NULL, '2017-08-15 11:14:00.623', '2017-08-15 14:03:15.067', '037-01714223-REF-2'), 
    (NULL, '2017-08-11 11:13:36.537', '2017-08-14 12:45:13.103', '037-01714223-REF-2'), 
    (NULL, '2017-08-11 11:13:45.363', '2017-08-14 12:45:05.057', '037-01714223-REF-2'), 
    (NULL, '2017-08-11 11:13:44.007', '2017-08-14 12:44:58.027', '037-01714223-REF-2'), 
    (NULL, '2017-08-11 11:13:28.833', '2017-08-14 12:44:50.620', '037-01714223-REF-2'), 
    (NULL, '2017-08-11 11:13:48.490', '2017-08-14 12:44:43.387', '037-01714223-REF-2'), 
    (NULL, '2017-08-11 11:13:31.553', '2017-08-14 12:44:36.353', '037-01714223-REF-2'), 
    (NULL, '2017-08-11 11:13:39.410', '2017-08-14 12:44:28.450', '037-01714223-REF-2'); 

-- SELECT * FROM #TestData td; 

--============================================================================================================ 

SELECT 
    UpdatedOn = CAST(SUBSTRING(MAX(bv.BinaryValue), 5, 8) AS DATETIME), 
    td.rescd_PurchaseOrderLine 
FROM 
    #TestData td 
    CROSS APPLY (VALUES (CAST(td.RN AS BINARY(4)) + CAST(td.UpdatedOn AS BINARY(8)))) bv (BinaryValue) 
WHERE 
    td.cd_POLineItemScheduledShipDate IS NOT NULL 
GROUP BY 
    td.rescd_PurchaseOrderLine; 

結果...

UpdatedOn    rescd_PurchaseOrderLine 
----------------------- ----------------------- 
2017-08-24 14:47:56.567 037-01714223-REF-1 
2017-08-24 14:47:56.567 037-01714223-REF-2 
+0

這樣做了,謝謝! – Mike

+0

沒問題。很高興我能幫上忙。 :) –

0

這是不是太複雜,但您的要求是不明確的:

我試圖從該行的UpdatedOn日期與cd_POLineItemScheduledShipDate不是空的第一個實例。

在上面的句子中,沒有定義單詞「first」。除非您指定排序順序,否則將表視爲無序。

假設我們想通過更新日期訂購,查詢看起來像:

SELECT MIN(UpdatedOn) UpdatedOn 
FROM Shadow 
WHERE cd_POLineItemScheduledShipDate IS NULL 

如果你想用別的命令(例如創建日期),它只是稍微複雜一點:

SELECT TOP 1 UpdatedOn 
FROM Shadow 
WHERE cd_POLineItemScheduledShipDate IS NULL 
ORDER BY CreatedOn 

如果你需要在每_rescd_PurchaseOrderLine值的結果集一行可以羣:

SELECT MIN(UpdatedOn) UpdatedOn, _rescd_PurchaseOrderLine 
FROM Shadow 
WHERE cd_POLineItemScheduledShipDate IS NULL 
GROUP BY _rescd_PurchaseOrderLine 

SELECT FIRST_VALUE(UpdatedOn) OVER (ORDER BY CreatedOn) UpdatedOn, 
     _rescd_PurchaseOrderLine 
FROM Shadow 
WHERE cd_POLineItemScheduledShipDate IS NULL 
GROUP BY _rescd_PurchaseOrderLine 
+0

這幾乎工程。每個PurchaseOrderLine需要一個'UpdatedOn'值。當我運行它時,它會得到第一個數字* 037-01714223-REF-1 *的正確日期,但是第二個數字* 037-01714223-REF-2 *沒有。我確實已經通過'UpdatedOn DESC'進行了排序,而對於第二個數字,則取第二個最早的日期而不是最短的日期。 – Mike

+0

爲我的問題添加了一些說明。 – Mike

相關問題