2016-07-25 144 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

相关问题