2016-09-27 30 views
-1

我有一個複雜查詢的問題,我不知道如何編寫它。 我有下表:獲取按最近時間過濾的行mysql

+---------------+-----------+----------+--------------------------+ 
|id_incidencia | id_alarma | idaction | concat(fecha, ' ', hora) | 
+---------------+-----------+----------+--------------------------+ 
| 18488   |  551 |  1 | 2016-08-29 14:55:47  | 
| 18491   |  551 |  7 | 2016-08-29 15:02:47  | 
| 18493   |  551 |  6 | 2016-08-29 15:37:39  | 
| 18495   |  551 |  7 | 2016-08-29 15:41:27  | 
| 19263   |  551 |  6 | 2016-09-16 15:17:27  | 
| 19429   |  5151 |  5 | 2016-09-19 09:01:17  | 
| 19447   |  5151 |  5 | 2016-09-19 09:25:23  | 
| 19500   |  5151 |  5 | 2016-09-20 09:38:11  | 
| 19532   |  5151 |  5 | 2016-09-23 15:02:50  | 
| 19526   |  5151 |  6 | 2016-09-23 11:23:27  | 
| 19528   |  5151 |  6 | 2016-09-23 11:28:01  | 
| 19527   |  5151 |  7 | 2016-09-23 11:25:18  | 
| 19529   |  5151 |  7 | 2016-09-23 11:28:08  | 
+---------------+-----------+----------+--------------------------+ 

我想有從查詢下一個結果:

idaction | id_alarma | datetime 
---------+-----------+--------- 
7  | 551 | 2016-08-29 15:41:27 
7  | 5151 | 2016-09-23 11:28:08 

這意味着,我要爲每個組id_alarma的價值,我想最近一次的最後一行,它的值爲idaction。問題是,當我執行下一個查詢時,idaction中的值與日期時間字段不匹配。

,我提到的查詢是:

SELECT  a.id, 
      nia.idaction, 
      MAX(CONCAT(nia.fecha, ' ', nia.hora)) 
FROM  nectar_incidencias_alarma nia 
INNER JOIN alarmas a 
     ON a.id=nia.id_alarma 
WHERE  nia.idaction IN (6,7) 
GROUP BY a.id 
+0

我提的就是查詢:SELECT a.id,nia.idaction,MAX (CONCAT(nia.fecha,'',nia.hora))FROM nectar_incidencias_alarma nia INNER JOIN報警a ON a.id = nia.id_alarma WHERE nia.idaction IN(6,7)GROUP BY a.id – mp3man

+0

但是551 | 6比551 | 7更新!!!?! – Strawberry

回答

0

嘗試此查詢: -

select * from (
select * from (
SELECT  a.id, 
      nia.idaction grp_is, 
      MAX(CONCAT(nia.fecha, ' ', nia.hora)) time_is 
FROM  nectar_incidencias_alarma nia 
INNER JOIN alarmas a 
     ON a.id=nia.id_alarma 
WHERE  nia.idaction IN (6,7) 
GROUP BY a.id 
) tab1 
order by tab1.time_is desc) tab2 
group by tab2.grp_is 
+0

它不起作用,它仍然爲每個a.id值顯示重複的行 – mp3man

0

要檢索的idaction正確的值,你可以結合使用group_concatsubstring_index。需要注意的是,你並不真的需要加入表alarmas,因爲你有你在nectar_incidencias_alarma需要:

SELECT  id_alarma, 
      SUBSTRING_INDEX(GROUP_CONCAT(idaction 
          ORDER BY CONCAT(fecha, ' ', hora) DESC), ',', 1)+0 id_action, 
      MAX(CONCAT(fecha, ' ', hora)) 
FROM  nectar_incidencias_alarma 
WHERE  idaction IN (6,7) 
GROUP BY id_alarma