Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql-检索每个子组中的最后一条记录_Mysql_Sql_Group By_Greatest N Per Group - Fatal编程技术网

MySql-检索每个子组中的最后一条记录

MySql-检索每个子组中的最后一条记录,mysql,sql,group-by,greatest-n-per-group,Mysql,Sql,Group By,Greatest N Per Group,1.采购表 Id user pur_type ---------------------- 1 408 5-12 2 408 5-12 3 222 1-11 4 222 5-12 5 408 1-11 6 408 1-11 二,。货物表 Id parts days ----------------- 1 1-11 50 2 5-12

1.采购表

Id   user     pur_type
----------------------
1    408       5-12
2    408       5-12
3    222       1-11
4    222       5-12
5    408       1-11
6    408       1-11
二,。货物表

Id   parts    days
-----------------
1    1-11      50
2    5-12      40
我实现了这样的查询

SELECT p1.id, p1.user, p1.pur_type, g.parts, g.days
FROM purchase p1
INNER JOIN goods g ON p1.pur_type = g.parts
LEFT JOIN goods p2 ON ( p1.pur_type= p2.pur_type
AND p1.id < p2.id )
WHERE p2.id IS NULL
如何从一个特定用户的每个
采购类型的
采购
表中获取最后一条记录

例如,对于用户408,需要结果:

Id   user     parts   days
-------------------------
2    408       5-12    40
6    408       1-11    50
结果说明:
用户408的
部分
5-12的最后一条记录是
id
=2
用户408的
部分
1-11的最后记录是
id
=6

SELECT  a.*, c.* -- select columns youw ant
FROM    Purchase a
        INNER JOIN
        (
            SELECT user, MAX(ID) max_ID
            FROM    Purchase
            GROUP   BY user, pur_type
        ) b ON  a.user = b.user AND
                a.ID = b.max_ID
        INNER JOIN goods c
            ON a.pur_type = c.parts
WHERE   a.USER = 408

为了获得更好的性能,请在表
商品
零件
列以及
采购类型
上添加索引对现有查询进行简单修改:

SELECT p1.id, p1.user, p1.pur_type, g.parts, g.days
FROM purchase p1
INNER JOIN goods g ON p1.pur_type = g.parts
LEFT JOIN purchase p2 
       ON ( p1.pur_type= p2.pur_type AND p1.id < p2.id AND p1.user=p2.user)
WHERE p2.id IS NULL and p1.user = 408
选择p1.id、p1.user、p1.pur\u类型、g.parts、g.days
从购买p1
p1上的内部连接货物g.pur\U类型=g.零件
左加入购买p2
打开(p1.pur\u type=p2.pur\u type和p1.id
当然
左联商品p2
应该是
左联采购p2
?商品表中的id列实际上是多余的吗?结果将是408@user2054164:此查询将返回指定用户的每个
pur\u类型的采购表中的最后一条记录-请参阅。两个答案都是正确的,但这一个更接近您的原始查询。感谢您的回答,这将有助于为用户408获取最后一条记录的结果,但我的问题是,我需要得到最后一个特定类型的每种pur_类型的结果user@user2054164:请重新阅读我刚才所说的内容-此查询将返回指定用户的每种采购类型的采购表中的最后一条记录-请参阅前面注释中链接的SQLFIDLE。
SELECT p1.id, p1.user, p1.pur_type, g.parts, g.days
FROM purchase p1
INNER JOIN goods g ON p1.pur_type = g.parts
LEFT JOIN purchase p2 
       ON ( p1.pur_type= p2.pur_type AND p1.id < p2.id AND p1.user=p2.user)
WHERE p2.id IS NULL and p1.user = 408