SQL SUM COUNT与group by

时间:2018-01-08 06:23:41

标签: sql oracle

我有一个特定的问题,我无法解决,我真的不知道如何解决它。

我可以说几天的总结事件。如下:

date      | id | sub id | sum(a) | sum(b) | sum(c) | 
18.01.01  | 1  |  12    |  105   | 10     | 0
18.01.01  | 2  |  11    |  100   | 3      | 7
18.01.02  | 1  |  12    |  103   | 2      | 5
18.01.03  | 3  |  7     |  143   | 7      | 9
18.01.03  | 1  |  12    |  113   | 1      | 4

我想知道的是每个id和sub id对的天数,例如:

sum(days) |date      | id | sub id | sum(a) | sum(b) | sum(c) 
 3        |18.01.01  | 1  |  12    |  105   | 10     | 0
 1        |18.01.01  | 2  |  11    |  100   | 3      | 7
 3        |18.01.02  | 1  |  12    |  103   | 2      | 5
 1        |18.01.03  | 3  |  7     |  143   | 7      | 9
 3        |18.01.03  | 1  |  12    |  113   | 1      | 4
对于id = 1,

有3天,因为他有3条不同日期的记录。 现在我知道基础知识,但每次我计算它返回无效值的天数(如id = 1的106)。并且日期是时间戳,我使用trunc(date,'DD')来获取它们的日常时间。我尝试提取(从日期开始的日期)甚至sum()over()但似乎没有任何工作正常。

提前感谢任何提示。 编辑:Stackoverflow错误地格式化表

2 个答案:

答案 0 :(得分:1)

添加类似

的内容
 COUNT(DISTINCT trunc(date, 'DD') ) OVER (PARTITION BY id, subID)

可能会奏效。如果没有,请发布您用来建立第一张桌子的声明。

答案 1 :(得分:1)

您似乎想要一个窗口功能:

select count(*) over (partition by id) as sum_days,
       . . .