Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL从查询结果中删除重复项_Mysql_Sql_Greatest N Per Group - Fatal编程技术网

Mysql 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 以下是结果第一部分的屏幕截图: 我试图为每个具有最新日期的单

这是我的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
以下是结果第一部分的屏幕截图:

我试图为每个具有最新日期的单元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