2016-09-27 2 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  | 
+---------------+-----------+----------+--------------------------+ 

私は、クエリから次の結果を持っているしたいと思います:私はid_alarma値の各グループのために必要な手段は、私が取得したいです

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

最後の行は最後の時刻であり、値はidactionです。問題は、次のクエリを実行すると、idactionの値がdatetimeフィールドと同じではないということです。

私は言及クエリは次のとおりです。

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))nectar_incidencias_alarma nia INNER JOINアラームON a.id = nia.id_alarmaどこで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値の重複した行をappaeringです – mp3man

0

idactionの正しい値を取得するには、substring_indexと組み合わせてgroup_concatを使用することができます。あなたは本当にあなたがすべてを持っているとして、あなたはnectar_incidencias_alarmaに必要な、テーブルにalarmasに参加する必要はないことに注意してください:

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 
関連する問題