【问题标题】:get max ids by group mysql通过组mysql获取最大ID
【发布时间】:2019-02-12 00:37:18
【问题描述】:

我有这张表叫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_unit 的当前状态和 id_variety。 我有这个问题:

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_varietystate = 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   |
-----------------------------------------------------

希望你能帮助我!

【问题讨论】:

  • 那你为什么要搜索max ids?如果需要获取,请搜索 state = 100
  • @Shadow Beacuse 如果我需要知道 id_unit 的状态,例如在 '2017-08-09' 中,结果是 id_unit = 1type = 'SW' AND status = 200 AND id_variety = 1
  • 对不起,我不明白你想要什么。我认为您应该编辑您的问题并解释选择标准。

标签: mysql group-by subquery


【解决方案1】:

只需在 GROUP BY 中包含 id_variety。

    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

【讨论】:

    【解决方案2】:

    我不知道你为什么有这个要求,但我认为你可以使用以下查询来实现:

    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)
    

    希望这会有所帮助。

    【讨论】:

    • 如果被否决,请分享评论,以便我知道这不能解决问题的原因。
    猜你喜欢
    • 2019-02-18
    • 2015-10-07
    • 2016-04-16
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    相关资源
    最近更新 更多