我被困在创建一个复杂的查询......也许那里有一些帮助?:) 我有一张带有设备状态的表格。每次设备状态更改都会生成一个条目。我想要的是一个输出,我可以在其中看到所有设备的最新每个日期 - 对于表中包含的所有日期。在这个例子中 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