2016-07-25 89 views
1

我有一個包含相似值和日期數的數據集。我正在嘗試編寫一個sql查詢來查找行之間日期的差異,並將另一行中的值相加。該數據集是這樣的:查找具有相同值的行之間的日期差異

id   | date   | value | 
1   2015-06-01  10 
1   2015-09-22  25 
2   2015-12-10  15 
2   2015-07-11  20 
2   2015-10-18  25 
3   2015-04-05  30 
3   2015-05-02  45 
4   2015-06-01  20 

而我想獲得的是:

id | date_diff | value 
1  42   35 
2  149   60 
3  27   75 
4  0   20 

的想法是date_diff發現日期爲每個ID之間的區別,並總結了值。但是,date_diff函數不適合我,我認爲這可能是第一個問題。 date_diff函數返回此錯誤:

函數datediff(未知,日期,時間戳無時區)不存在 提示:沒有函數與給定的名稱和參數類型匹配。您可能需要添加顯式類型轉換。

我正在使用公共數據集,因此可能是問題的一部分。任何幫助或想法都會很棒!

+0

如果id爲1的行有3行,會發生什麼情況? – mayu

+0

Hi @Tymski理想情況下,我會發現給定ID的最短和最長日期之間的差異。對於ID 1,如果有三行,則date_diff將是最早和最近日期的差異btw,類似於ID 2.謝謝! – NLourme

+0

您正在使用哪些DBMS? –

回答

1

讓我們創建一個測試表:

create table test 
(
id int , 
date DATE, 
value int 
) 


insert into test values (1, CAST('2015-06-01' AS DATE), 10); 
insert into test values (1, CAST('2015-09-22' AS DATE), 25); 
insert into test values (2, CAST('2015-12-10' AS DATE), 100); 
insert into test values (2, CAST('2015-07-11' AS DATE), 200); 

讓我們來看看這些數據:

select * from test ORDER BY id; 

1 2015-06-01 10 
1 2015-09-22 25 
2 2015-12-10 100 
2 2015-07-11 200 

讓我們做的魔術。

select datediff(day, MIN(DATE), MAX(DATE)) as diff_in_days, sum(value) as sum_of_values FROM test group by id; 

113 35 
152 300 

請注意,您沒有指定當有3行id時應該發生什麼。代碼仍然可以工作,但是如果從您的應用程序的邏輯角度來看它是有意義的,我不知道。

+0

工作得很好,謝謝。我認爲DateDiff函數不適用於我正在使用的數據,因爲我在不同的數據集上使用了您的解決方案,並且它運行得非常好。我結束了與時間戳(最大(日期) - 分鐘(日期))。 – NLourme