按组mysql获取最大ID

按组mysql获取最大ID,mysql,group-by,subquery,Mysql,Group By,Subquery,我有一张桌子叫sw_ 我想知道id单元的当前状态和id种类,具体取决于日期。 我有一个疑问: 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

我有一张桌子叫sw_

我想知道id单元的当前状态和id种类,具体取决于日期。 我有一个疑问:

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=3有两个不同的id_变体,state=100,但是前面的查询给出了最后一个id_变体,我想要两个id_变体

大概是这样的:

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

我希望你能帮助我

只需将id_多样性包含在群组中即可

    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

我不知道您为什么有这个要求,但我认为您可以通过以下查询实现这一点:

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)

希望这有帮助。

那么为什么要搜索最大ID?如果您需要获取,请搜索state=100。@Shadow因为如果我需要知道id\u单元的状态,例如在'2017-08-09'中,结果是id\u单元=1的类型为'SW',状态为200,id\u多样性为1,很抱歉,我没有得到您想要的。我认为你应该编辑你的问题并解释选择标准。如果被否决,请分享评论,这样我就可以知道这不能解决问题的原因。
    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
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)