使用group by语句时,SQL获取最后一条记录

时间:2019-07-28 06:27:45

标签: mysql sql

我想使用group by语句获取“ productID”的最新记录。

数据库记录:

cartID  productID   customerID  quantity    dateAdded   paidStatus
1       20          14          1           2019-03-14  1
2       21          14          1           2019-04-24  1
7       20          16          1           2019-04-25  1
8       20          17          1           2019-04-29  1
11      21          17          2           2019-07-28  1

我尝试过的是:SQL

SELECT * FROM `cart` WHERE productID=20 OR productID=21 GROUP BY productID ORDER BY cartID ASC

对于当前结果,我得到的是cartID 1而不是8的第一条记录

下面的SQL记录:

cartID  productID   customerID  quantity    dateAdded   paidStatus
1       20          14          1           2019-03-14  1
2       21          14          1           2019-04-24  1

我想要的是: 由于某种原因,我需要获取多个记录(按productID)示例,例如WHERE productID=20 OR WHERE productID=21

productID 2021都有多个记录,但

  

我需要同时获取最后两个记录

我需要的结果:

cartID  productID   customerID  quantity    dateAdded   paidStatus
8       20          17          1           2019-04-29  1
11      21          17          2           2019-07-28  1

2 个答案:

答案 0 :(得分:0)

您可以将子查询用于按客户和产品分组的最大值组,然后加入

select  a.productId, a.CustomerId, a.quantity, a.dateadded , a.paidstatus 
from my_table a 
inner join  (
  select productId, CustomerId, max(dateadded) max_date
  from my_table  
  group by  productId, CustomerId

) t on t.productId = a.productId
        and t.CustomerId = a.CustomerId
            and t.max_date  = a.dateadded

答案 1 :(得分:0)

不存在:

SELECT t.* 
FROM cart t
WHERE t.productID IN (20, 21)
AND NOT EXISTS (
  SELECT 1 FROM cart
  WHERE productID = t.productID AND dateAdded > t.dateAdded
)