2015-10-28 20 views
-2

所以我在這裏我們的數據庫中的表下面的列是.....發現在一個領域日期的差別

Transaction_Date | Trans_Code 

1/1/2015   | JR 
1/15/2015  | CP01 

所以我試圖找到之間的差異的例子發票日期(JR)和付款日期(CP01)。什麼是最好的方式去做這件事?我試圖做一個子選擇,但沒有奏效。

這裏是別的東西,我有以下建議

Select 

INVC_NUMB, 
CUST_NUMB, 
DATEDIFF (
    DAY, 
    MAX(CASE WHEN TRANS_CODE = 'JR' THEN CONVERT(CHAR(10), DATEADD(d, TRANS_RDAT +5843, 0), 101) END), 
    MAX(CASE WHEN TRANS_CODE = 'CP01' THEN CONVERT(CHAR(10), DATEADD(d, TRANS_RDAT +5843, 0), 101) END) 
) AS DAYDIFF 



FROM AR20 

WHERE CONVERT(CHAR(10), DATEADD(d, TRANS_RDAT +5843, 0), 112) > 20141231 

GROUP BY 
INVC_NUMB, 
CUST_NUMB, 
CONVERT(CHAR(10), DATEADD(d, TRANS_RDAT +5843, 0), 1) 

ORDER BY 
CONVERT(CHAR(10), DATEADD(d, TRANS_RDAT +5843, 0), 1) 
+0

究竟你有試過嗎?你有什麼結果和預期的結果? –

+2

他們是如何相關的?我錯過了一個兩個記錄共享一個「Transaction_Id」的值。 –

+0

在SQL服務器上,您可以使用DATEDIFF函數來獲取兩個日期之間的差異。如何獲取日期取決於數據的結構。就像Tim Schmelter所說,似乎你錯過了將兩個記錄連接在一起的領域。 – SunKnight0

回答

0

一種方法嘗試是有條件聚集:

select datediff(day, 
       max(case when trans_code = 'JR' then transaction_date end), 
       max(case when trans_code = 'CP01' then transaction_date end) 
       ) as diff 
from t; 
+0

爲什麼使用Max?如果不尋找最大的數字,是不是隻會拉動這些數字的差異? –

+0

如果只有兩個數字行,那麼'max()'只是選擇適當的值。您需要進行聚合以獲取一行中的值,以便您可以進行算術運算。 –