选择最后插入的记录并对mysql进行分组

时间:2012-07-24 10:00:46

标签: php mysql sql

我有一张带笔记的桌子。以下是我的数据库的一小部分数据。

Id  register_no     name        classification      possibility
1   112             Ben         Red                 10%
2   112             Ben         Red                 10%
3   113             Ben         Red                 20%
4   112             Ben         Amber               30%
5   112             Ben         Amber               10%
6   113             Ben         Amber               30%
7   113             Ben         Red                 10%
8   112             Ben         Red                 50%

对不起,我以错误的方式解释了这个问题。

实际上我想要的是为每个register_no检索最后插入的记录,因为sales_log表保存了列表进度...

举个例子 Register_no 112在数据库中有12条记录,最后一条记录是90%(它从10,40,60%进展,因此所有这些记录都在数据库中)

我想要的是得到90%的register_no 112等等...它不仅仅是一条记录......大约有500个register_no,我想得到每个register_no的最后一个条目

希望这次有意义

4 个答案:

答案 0 :(得分:3)

您应该尝试此查询以获取具有最大id值的寄存器号的注释:

SELECT n1.*
FROM   notes n1
       LEFT JOIN notes n2
           ON (n1.register_no = n2.register_no AND n1.id < n2.id)
WHERE  n2.id IS NULL;

来源:Retrieving the last record in each group

答案 1 :(得分:2)

尝试

SELECT * FROM (`sales_log`) WHERE 1 ORDER BY `id` DESC LIMIT 2

告诉mysql匹配'name = ben'永远不会找到mandy的id 7

答案 2 :(得分:2)

使用

SELECT * FROM sales_log WHERE `classification` =  'red' ORDER BY `Id` DESC LIMIT 2;

答案 3 :(得分:2)

这应该有效:

SELECT data.* 
FROM sales_log AS data
JOIN 
    (
        SELECT MAX(Id) as Id 
        FROM sales_log 
        GROUP BY register_no
    ) AS newest
    ON data.Id = newest.Id

结果:

'8', '112', 'Ben', 'Red', '50'
'7', '113', 'Ben', 'Red', '10'

编辑:我只看了@ Omesh的链接,显然他发布的解决方案要快得多。它产生与我的查询完全相同的输出。