我有三张桌子
我想执行一个查询,它连接每台机器的max event id数据,但是我在分组方面遇到了一些问题。
台式机:
machine
-----------
Machine 1
Machine 2
表格事件:
eventid | machine | start | stop
-----------------------------------------------
1 | Machine 1 | 2016-06-14 | 2016-06-16
2 | Machine 1 | 2016-06-16 | null
1 | Machine 2 | 2016-05-30 | null
表格eventdetails:
eventid | machine | name | value
-----------------------------------------------
1 | Machine 1 | product | Product 1
1 | Machine 1 | person | Samuel
我尝试过以下查询,但每台机器返回多行......我想按机器分组,只根据最大事件ID获取数据。
SELECT m.machine, MAX(e.eventid), e.start, e.stop, d.name, d.value
FROM machine m
JOIN event e ON e.machine = m.machine
JOIN eventdetails d ON d.eventid = e.eventid AND d.machine = m.machine
GROUP BY m.machine, e.start, e.stop, d.name, d.value
提前致谢。
答案 0 :(得分:2)
给这个人一个机会。它为您提供了一个内部联接,它将禁止event
表中的任何内容与同一个表中的max(eventid)
不相等。
SELECT m.machine, e.eventid, e.start, e.stop, d.name, d.value
FROM machine m
INNER JOIN event e ON e.machine = m.machine
INNER JOIN eventdetails d ON d.eventid = e.eventid AND d.machine = m.machine
INNER JOIN (SELECT machine, MAX(eventid) maxevent FROM event GROUP BY machine) ma ON m.machine = ma.machine AND e.eventid = ma.maxevent
GROUP BY m.machine, e.start, e.stop, d.name, d.value