So, I wanted to get the SUM of New Ink (ml) and Ink Used (ml) grouped by Date, Paper Code, and Ink Code but I also wanted the Date group the difference of the Date only by a day
Main Table
| Date | Paper Code | Ink Code | New Ink (ml) | Ink Used (ml) |
|---|---|---|---|---|
| 10-1-2022 | 911 | C21 | 10 | 8 |
| 10-1-2022 | 911 | C29 | 9 | 3 |
| 10-2-2022 | 911 | C21 | 8 | 3 |
| 10-5-2022 | 911 | C21 | 25 | 15 |
| 10-12-2022 | 911 | C21 | 10 | 8 |
| 10-13-2022 | 911 | C21 | 8 | 6 |
| 10-15-2022 | 911 | C21 | 6 | 6 |
| 10-15-2022 | 911 | C29 | 9 | 9 |
Expected result should be :
For Date 10-1-2022 and 10-2-2022
| Paper Code | Ink Code | New Ink (ml) | Ink Used (ml) |
|---|---|---|---|
| 911 | C21 | 18 | 11 |
| 911 | C29 | 9 | 3 |
For Date 10-5-2022
| Paper Code | Ink Code | New Ink (ml) | Ink Used (ml) |
|---|---|---|---|
| 911 | C21 | 25 | 15 |
For Date 10-12-2022 and 10-13-2022
| Paper Code | Ink Code | New Ink (ml) | Ink Used (ml) |
|---|---|---|---|
| 911 | C21 | 18 | 14 |
For Date 10-15-2022
| Paper Code | Ink Code | New Ink (ml) | Ink Used (ml) |
|---|---|---|---|
| 911 | C21 | 6 | 6 |
| 911 | C29 | 9 | 9 |
and all combined would be
| Paper Code | Ink Code | New Ink (ml) | Ink Used (ml) |
|---|---|---|---|
| 911 | C21 | 18 | 11 |
| 911 | C29 | 9 | 3 |
| 911 | C21 | 25 | 15 |
| 911 | C21 | 18 | 14 |
| 911 | C21 | 6 | 6 |
| 911 | C29 | 9 | 9 |
I've tried
SELECT
[Paper Code],
[Ink Code],
SUM([New Ink (ml)]) AS [New Ink (ml)],
SUM([Ink Used (ml)]) AS [Ink Used (ml)]
FROM [Table Ink]
GROUP BY [Paper Code], [Ink Code]
CodePudding user response:
As suggested in comments, you can use LAG() or LEAD() to identify the group of rows. After that just use GROUP BY as per normal
with cte as
(
select *,
g = case when datediff(day, lag([Date]) over (order by [Date]),
[Date]) > 1
then 1
else 0
end
from [Table Ink]
),
cte2 as
(
select *, grp = sum(g) over (order by [Date])
from cte
)
select [Paper Code], [Ink Code],
sum([New Ink (ml)]) as [New Ink (ml)],
sum([Ink Used (ml)]) as [Ink Used (ml)]
from cte2
group by grp, [Paper Code], [Ink Code]
