I have a sample table that stores information as follows: The two sub-systems are mini1 and mini2
| System | Date | Sub System | Count |
|---|---|---|---|
| primary | 2022-05-11 | mini1 | 103 |
| secondary | 2022-05-11 | mini2 | 100 |
| secondary | 2022-05-11 | mini1 | 10 |
| backup | 2022-05-11 | mini2 | 95 |
| backup | 2022-05-11 | mini1 | 11 |
| primary | 2022-05-11 | mini2 | 15 |
| primary | 2022-04-01 | mini1 | 0 |
| secondary | 22022-04-01 | mini2 | 0 |
| secondary | 2022-04-01 | mini1 | 100 |
| backup | 2022-04-01 | mini2 | 0 |
| backup | 2022-04-01 | mini1 | 110 |
| primary | 2022-04-01 | mini2 | 0 |
I want to get the latest information on each system in a format such as follows, where only the latest date is considered.
| System | Latest Date | mini1 Count | mini 2 Count |
|---|---|---|---|
| primary | 2022-05-11 | 103 | 15 |
| secondary | 2022-05-11 | 10 | 100 |
| backup | 2022-05-11 | 11 | 95 |
Is this possible through sql?
CodePudding user response:
Do a GROUP BY. Use case expressions to do conditional aggregation.
select System,
max(Date) LatestDate,
sum(case when SubSystem = 'mini1' then count else 0 end) Mini1Count,
sum(case when SubSystem = 'mini2' then count else 0 end) Mini2Count
from tablename
group by System
