MySQL 5.7 - 从特定的列组合中获取最新条目
MySQL 5.7 - getting latest entry(s) from specific combination of columns
亲爱的 MySQL 用户,您好!
我尝试解决这个问题已经有一段时间了,但我尝试的一切似乎都不起作用。
很抱歉,如果某个地方已经有了答案,但我知道如何搜索。
它不是那么容易用语言解释所以我用这个table(称为tbl
)来解释它:
ID
SerNo
TypeOfChange
InfoAboutChange
TimestampOfChange
1
1
Name
DN01
2020/12/01
2
1
IPAddress
192.168.1.1
2020/12/01
3
1
Name
DNX1
2020/12/02
4
2
Name
DN02
2020/12/04
5
2
IPAddress
192.168.1.2
2020/12/04
6
1
Name
DNC1
2020/12/05
现在我想获取 each SerNo 的 latest 状态。它应该是这样的:
ID
SerNo
TypeOfChange
InfoAboutChange
TimestampOfChange
2
1
IPAddress
192.168.1.1
2020/12/01
6
1
Name
DNC1
2020/12/05
4
2
Name
DN02
2020/12/04
5
2
IPAddress
192.168.1.2
2020/12/04
我找到了如何获取每个 TypeofChange
的最新条目,但它是忽略设备 SerNo 的最新更改:
select TypeOfChange, max(TimestampOfChange) from tbl group by TypeOfChange
我需要组合 SerNo 分组,然后找到所有 typeofchange,group them 并使用 max()
查找最新版本
但我完全不知道该怎么做。
谢谢您,祝您身体健康!
你可以这样做:
select t.*
from mytable t
where timestampofchange = (
select max(t1.timestampofchange)
from mytable t1
where t1.typeofchange = t.typeofchange and t1.erno = t.serno
)
亲爱的 MySQL 用户,您好!
我尝试解决这个问题已经有一段时间了,但我尝试的一切似乎都不起作用。 很抱歉,如果某个地方已经有了答案,但我知道如何搜索。
它不是那么容易用语言解释所以我用这个table(称为tbl
)来解释它:
ID | SerNo | TypeOfChange | InfoAboutChange | TimestampOfChange |
---|---|---|---|---|
1 | 1 | Name | DN01 | 2020/12/01 |
2 | 1 | IPAddress | 192.168.1.1 | 2020/12/01 |
3 | 1 | Name | DNX1 | 2020/12/02 |
4 | 2 | Name | DN02 | 2020/12/04 |
5 | 2 | IPAddress | 192.168.1.2 | 2020/12/04 |
6 | 1 | Name | DNC1 | 2020/12/05 |
现在我想获取 each SerNo 的 latest 状态。它应该是这样的:
ID | SerNo | TypeOfChange | InfoAboutChange | TimestampOfChange |
---|---|---|---|---|
2 | 1 | IPAddress | 192.168.1.1 | 2020/12/01 |
6 | 1 | Name | DNC1 | 2020/12/05 |
4 | 2 | Name | DN02 | 2020/12/04 |
5 | 2 | IPAddress | 192.168.1.2 | 2020/12/04 |
我找到了如何获取每个 TypeofChange
的最新条目,但它是忽略设备 SerNo 的最新更改:
select TypeOfChange, max(TimestampOfChange) from tbl group by TypeOfChange
我需要组合 SerNo 分组,然后找到所有 typeofchange,group them 并使用 max()
查找最新版本但我完全不知道该怎么做。
谢谢您,祝您身体健康!
你可以这样做:
select t.*
from mytable t
where timestampofchange = (
select max(t1.timestampofchange)
from mytable t1
where t1.typeofchange = t.typeofchange and t1.erno = t.serno
)