我在表格中有以下数据:
id name alarmId alarmUnit alarmLevel
1 test voltage psu warning
2 test voltage psu ceasing
3 test voltage psu warning
4 test temp rcc warning
5 test temp rcc ceasing
Run Code Online (Sandbox Code Playgroud)
我只想显示有关每个列组(alarmId,alarmUnit)的最新信息,因此结果应如下所示:
3 test voltage psu warning
5 test temp rcc ceasing
Run Code Online (Sandbox Code Playgroud)
我到目前为止尝试过:
SELECT MAX(id) as id,name,alarmId,alarmUnit,alarmLevel GROUP BY alarmId,alarmUnit;
选定的ID似乎没问题,但选定的行与它们不对应.你可以帮帮我吗?
Qua*_*noi 29
在Oracle,SQL Server 2005+和PostgreSQL 8.4:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY alarmId, alarmUnit ORDER BY id DESC) AS rn
FROM mytable
) q
WHERE rn = 1
Run Code Online (Sandbox Code Playgroud)
在MySQL:
SELECT mi.*
FROM (
SELECT alarmId, alarmUnit, MAX(id) AS mid
FROM mytable
GROUP BY
alarmId, alarmUnit
) mo
JOIN mytable mi
ON mi.id = mo.mid
Run Code Online (Sandbox Code Playgroud)
在PostgreSQL 8.3及以下:
SELECT DISTINCT ON (alarmId, alarmUnit) *
FROM mytable
ORDER BY
alarmId, alarmUnit, id DESC
Run Code Online (Sandbox Code Playgroud)
Chr*_*fer 19
如果你想获得max的行,你可能需要一个子查询.就像是:
SELECT *
FROM YourTable
WHERE id IN (
SELECT MAX(id) FROM YourTable GROUP BY alarmId, alarmUnit
)
Run Code Online (Sandbox Code Playgroud)
尝试:
SELECT * FROM table WHERE id IN
(SELECT MAX(id) FROM table GROUP BY alarmId, alarmUnit)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60572 次 |
| 最近记录: |