получить максимальные идентификаторы по группе mysql - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть эта таблица с именем sw_sowing

-----------------------------------------------------------------
 id  |   id_unit  |  date      |  id_variety |  type  |  status |
-----------------------------------------------------------------
  1  |      1     | 2017-08-10 |     1        |  SW   |    200  |
-----------------------------------------------------------------
  2  |      1     | 2017-10-10 |     1        |  ER   |    100  |
-----------------------------------------------------------------
  3  |      1     | 2017-11-30 |     2        |  SW   |    100  |
-----------------------------------------------------------------
  4  |      2     | 2017-12-10 |     3        |  SW   |    200  |
-----------------------------------------------------------------
  5  |      2     | 2017-12-10 |     3        |  ER   |    100  |
-----------------------------------------------------------------
  6  |      3     | 2017-08-05 |     4        |  SW   |    200  |
-----------------------------------------------------------------
  7  |      3     | 2017-12-13 |     4        |  ER   |    100  |
-----------------------------------------------------------------
  8  |      3     | 2018-01-04 |     1        |  SW   |    100  |
-----------------------------------------------------------------
  9  |      3     | 2018-01-04 |     2        |  SW   |    100  |
-----------------------------------------------------------------

Я хочу знать текущий статус и id_variety id_unit в зависимости от даты. У меня есть этот запрос:

SELECT sw_sowing.id_unit, sw_sowing.id_variety, sw_sowing.type, sw_sowing.status
FROM (
        SELECT MAX(id) AS id
        FROM sw_sowing
        WHERE date <= '2018-09-06'
        GROUP BY id_unit
) AS sw
INNER JOIN sw_sowing ON sw_sowing.id = sw.id

Это дает мне следующий результат:

----------------------------------------------------- 
   id_unit  |    id_variety |    type    |   status |
-----------------------------------------------------
      1     |        2      |     SW     |    100   |
-----------------------------------------------------
      2     |        3      |     ER     |    100   |
-----------------------------------------------------
      3     |        2      |     SW     |    100   |
-----------------------------------------------------

Проблема в том, что id_unit = 3 имеет два разных id_variety с state = 100, но предыдущий запрос дает последний, а я хочу два id_variety.

Примерно так:

----------------------------------------------------- 
   id_unit  |    id_variety |    type    |   status |
-----------------------------------------------------
      1     |        2      |     SW     |    100   |
-----------------------------------------------------
      2     |        3      |     ER     |    100   |
-----------------------------------------------------
      3     |        1      |     SW     |    100   |
-----------------------------------------------------
      3     |        2      |     SW     |    100   |
-----------------------------------------------------

Я надеюсь, что вы можете мне помочь!

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Я не знаю, почему у вас есть это требование, но я думаю, что вы можете достичь этого, используя следующий запрос:

SELECT id_unit, id_variety, type, status FROM sw_sowing WHERE id IN (
  SELECT MAX(id) FROM sw_sowing WHERE (id_unit, date) IN (
    SELECT id_unit, MAX(date) FROM sw_sowing 
    WHERE date <= '2018-09-06'
    GROUP BY id_unit)
  GROUP BY id_unit, id_variety)

Надеюсь, это поможет.

0 голосов
/ 06 сентября 2018

Просто включите id_variety в GROUP BY.

    SELECT sw_sowing.id_unit, sw_sowing.id_variety, sw_sowing.type, sw_sowing.status
FROM (
        SELECT MAX(id) AS id
        FROM sw_sowing
        WHERE date <= '2018-09-06'
        GROUP BY id_unit,id_variety
) AS sw
INNER JOIN sw_sowing ON sw_sowing.id = sw.id
...