【问题标题】:How do I select unique, most recently inserted, values from a mysql table?如何从 mysql 表中选择唯一的、最近插入的值?
【发布时间】:2012-09-11 11:58:54
【问题描述】:

我的桌子(产品)看起来像这样:

id name value
1  oil  100
2  oil  140
3  glue 120
4  glue 110

我需要选择最后插入的oil和最后插入的glue,所以结果应该是:

2 oil 140
4 glue 110

我尝试了什么:

SELECT * FROM `products` GROUP BY `name` ORDER BY `value` DESC LIMIT 2

但是这个查询显示

1  oil  100
3  glue 120

【问题讨论】:

  • 您的查询没问题。您使用 ID 而不是值。

标签: mysql database


【解决方案1】:

您需要获取每种类型的最后插入行(最高 id),然后检索这些 id 的数据。这假设您的 id 编号随着每次新插入而增加,因此更高的 id 值假定稍后插入。

 SELECT d.id, d.name, d.value
   FROM products d
   JOIN (
     SELECT MAX(id) id, name
       FROM products
      GROUP BY name
   ) m ON (d.id = m.id) 

【讨论】:

    【解决方案2】:

    试试这个:-

    SELECT * FROM `products` GROUP BY `name` ORDER BY id DESC LIMIT 2
    

    【讨论】:

    • 请忽略这只眼睛很有趣
    【解决方案3】:

    这个查询应该可以解决问题:

    SELECT a.*
    FROM products a
         INNER JOIN (SELECT MAX(id) AS id
                     FROM products
                     GROUP BY name
                    ) b
                    ON a.id = b.id;
    

    【讨论】:

    • ofc 但我需要再等 3 分钟 :>
    【解决方案4】:

    您需要在表上进行自联接:

    SELECT p1.id, p1.name, p1.value
    FROM products p1
    inner join 
    (
       select name, max(id) mxid
       from products
       group by id
    ) p2
       on p1.name = p2.name
       and p1.id = p2.mxid
    

    内部子查询获取记录的max() id,然后将其加入表中以返回所需的记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      相关资源
      最近更新 更多