Mysql SQL从查询结果中删除重复项
这是我的SQL:Mysql SQL从查询结果中删除重复项,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,这是我的SQL: SELECT * FROM unity_database.unit_uptime_daily inner join unity_database.units on unity_database.units.id = unity_database.unit_uptime_daily.unit_id where unity_database.units.location_id = 1 以下是结果第一部分的屏幕截图: 我试图为每个具有最新日期的单
SELECT * FROM unity_database.unit_uptime_daily
inner join unity_database.units on unity_database.units.id = unity_database.unit_uptime_daily.unit_id
where unity_database.units.location_id = 1
以下是结果第一部分的屏幕截图:
我试图为每个具有最新日期的单元id只显示一个结果,因此在本例中,单元id为30的单元应该只显示一次,并且应该是最下面一行
有什么想法吗
WITH X AS
(
SELECT *
,ROW_NUMBER() OVER (PARTITION BY Unit_Id ORDER BY [Timestamp] DESC) rn
FROM unity_database.unit_uptime_daily
inner join unity_database.units
on unity_database.units.id = unity_database.unit_uptime_daily.unit_id
where unity_database.units.location_id = 1
)
SELECT * FROM X Where rn = 1
或
以下是您可以考虑的MySQL解决方案:
SELECT t1.id, t1.unit_id, t1.uptime, t1.total_update, t2.timestamp
FROM
(
SELECT *
FROM unity_database.unit_uptime_daily ud1 INNER JOIN unity_database.units ud2
ON ud2.id = ud1.unit_id
WHERE ud2.location_id = 1
) t1
INNER JOIN
(
SELECT ud1.unit_id, MAX(ud1.timestamp) AS timestamp
FROM unity_database.unit_uptime_daily ud1 INNER JOIN unity_database.units ud2
ON ud2.id = ud1.unit_id
WHERE ud2.location_id = 1
GROUP BY ud1.unit_id
) t2
ON t1.unit_id = t2.unit_id AND t1.timestamp = t2.timestamp
请确认此答案是否能提供您期望的结果:
SELECT MAX(id) AS ID, unit_id, uptime, total_update, MAX(timestamp) as timesstamp FROM unity_database.unit_uptime_daily
inner join unity_database.units on unity_database.units.id = unity_database.unit_uptime_daily.unit_id
where unity_database.units.location_id = 1
GROUP BY unit_id, uptime, total_update
PS:我没有测试,但我肯定它会工作的你在使用什么数据库?我在使用SQL Workbench?你在使用MySQL吗?是的,我在使用MySQL,对不起。事实上我在做相同的回答@m.alin其中一项工作,可能是因为我在使用SQLWorkbench?错误代码:1305。函数ROW_NUMBER不存在我得到了一个重复的列名ID,如果我是个白痴,我很抱歉我没有与MYSQL进行过很多工作。不幸的是,因为我面前没有你的数据库,所以我无能为力。我建议分别测试这两个子查询中的每一个子查询,看看您得到了什么。一旦你解决了重复列的问题(根据你告诉我们的,我看不到这个问题),就把它们拼凑起来。
SELECT MAX(id) AS ID, unit_id, uptime, total_update, MAX(timestamp) as timesstamp FROM unity_database.unit_uptime_daily
inner join unity_database.units on unity_database.units.id = unity_database.unit_uptime_daily.unit_id
where unity_database.units.location_id = 1
GROUP BY unit_id, uptime, total_update