繁体   English   中英

SQL从查询结果中删除重复项

[英]SQL remove duplicates from query results

这是我的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

以下是结果第一部分的屏幕截图: 在此处输入图片说明

我试图为每个具有最新日期的unit_id仅显示一个结果,因此在此示例中,unit_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

要么

SELECT * 
FROM (
    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
     )A
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:我没有测试,但是我很肯定它会起作用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM