我被困在创建一个复杂的查询......也许那里有一些帮助?:) 我有一张带有设备状态的表格。每次设备状态更改都会生成一个条目。我想要的是一个输出,我可以在其中看到所有设备的最新每个日期 - 对于表中包含的所有日期。在这个例子中 04.05.2021 - 06.05.2021。我想将它用于仪表板。
谁能帮我吗?
以下是该表的外观示例:设备更改表:
| ID | 设备ID | 改变 | 预值 | 后值 |
|---|---|---|---|---|
| 20 | 40 | 04.05.2021 13:00 | - | 上 |
| 21 | 41 | 04.05.2021 13:00 | - | 上 |
| 22 | 42 | 04.05.2021 13:00 | - | 上 |
| 23 | 43 | 04.05.2021 13:00 | - | 上 |
| 24 | 44 | 04.05.2021 13:00 | - | 上 |
| 25 | 45 | 04.05.2021 13:00 | - | 上 |
| 26 | 46 | 04.05.2021 13:00 | - | 上 |
| 27 | 47 | 04.05.2021 13:00 | - | 上 |
| 28 | 48 | 04.05.2021 13:00 | - | 上 |
| 29 | 40 | 05.05.2021 15:00 | 上 | 离开 |
| 30 | 40 | 05.05.2021 16:00 | 离开 | 恢复 |
| 31 | 40 | 05.05.2021 17:00 | 恢复 | 等待 |
| 32 | 41 | 06.05.2021 09:00 | 上 | 离开 |
| 33 | 41 | 06.05.2021 10:00 | 离开 | 等待 |
| 35 | 40 | 06.05.2021 11:00 | 等待 | 上 |
我想要实现的输出如下:
| LATESTSTATPERDATE | 设备ID | 改变 | 预值 | 后值 |
|---|---|---|---|---|
| 04.05.2021 | 40 | 04.05.2021 13:00 | - | 上 |
| 04.05.2021 | 41 | 04.05.2021 13:00 | - | 上 |
| 04.05.2021 | 42 | 04.05.2021 13:00 | - | 上 |
| 04.05.2021 | 43 | 04.05.2021 13:00 | - | 上 |
| 04.05.2021 | 44 | 04.05.2021 13:00 | - | 上 |
| 04.05.2021 | 45 | 04.05.2021 13:00 | - | 上 |
| 04.05.2021 | 46 | 04.05.2021 13:00 | - | 上 |
| 04.05.2021 | 47 | 04.05.2021 13:00 | - | 上 |
| 04.05.2021 | 48 | 04.05.2021 13:00 | - | 上 |
| 05.05.2021 | 40 | 05.05.2021 17:00 | 恢复 | 等待 |
| 05.05.2021 | 41 | 04.05.2021 13:00 | - | 上 |
| 05.05.2021 | 42 | 04.05.2021 13:00 | - | 上 |
| 05.05.2021 | 43 | 04.05.2021 13:00 | - | 上 |
| 05.05.2021 | 44 | 04.05.2021 13:00 | - | 上 |
| 05.05.2021 | 45 | 04.05.2021 13:00 | - | 上 |
| 05.05.2021 | 46 | 04.05.2021 13:00 | - | 上 |
| 05.05.2021 | 47 | 04.05.2021 13:00 | - | 上 |
| 05.05.2021 | 48 | 04.05.2021 13:00 | - | 上 |
| 06.05.2021 | 40 | 06.05.2021 11:00 | 等待 | 上 |
| 06.05.2021 | 41 | 06.05.2021 10:00 | 离开 | 等待 |
| 06.05.2021 | 42 | 04.05.2021 13:00 | - | 上 |
| 06.05.2021 | 43 | 04.05.2021 13:00 | - | 上 |
| 06.05.2021 | 44 | 04.05.2021 13:00 | - | 上 |
| 06.05.2021 | 45 | 04.05.2021 13:00 | - | 上 |
| 06.05.2021 | 46 | 04.05.2021 13:00 | - | 上 |
| 06.05.2021 | 47 | 04.05.2021 13:00 | - | 上 |
| 06.05.2021 | 48 | 04.05.2021 13:00 | - | 上 |
WORKING SOLUTION FOR ME:
With
Query1 As (
Select
*
From
devices
)
select
first.deviceid as Device,
first.changedon as Date,
first.changedon1 as SubDate,
first.prevalue,
first.postvalue
from (
Select
Concat(Date(devices.changedon), " 23:59:59") As changedon,
Query1.deviceid,
Query1.changedon As changedon1,
Query1.prevalue,
Query1.postvalue
From
devices Left Join
Query1 On Query1.changedon <= devices.changedon
Group By
devices.changedon,
Query1.deviceid
order by devices.changedon DESC, changedon1 DESC
) as first
group by Date,Device
order by Date ASC