MySQL:按多列分组时选择第一行或最后一行

标签 mysql sql select group-by distinct

我有一个 SQL 表,其中包含一些商品的销售数据。事实上,它有元素销售的日志。

例如,有一个销售包含 2 个项目:键盘 (id:1) 和鼠标 (id:2)。买家可以对每件商品进行多次出价,例如 ebay。因此,我们假设有 2 个买家(id 分别为 97 和 98)出价了几次。相关数据为:

bid_id  |   buyer_id    |   item_id |   amount      |   time                |
1       |   97          |   1       |   44.26       |   2014-01-20 15:53:16 |
2       |   98          |   2       |   30.47       |   2014-01-20 15:54:52 |
3       |   97          |   2       |   40.05       |   2014-01-20 15:57:47 |
4       |   97          |   1       |   42.46       |   2014-01-20 15:58:36 |
5       |   97          |   1       |   39.99       |   2014-01-20 16:01:13 |
6       |   97          |   2       |   24.68       |   2014-01-20 16:05:35 |
7       |   98          |   2       |   28          |   2014-01-20 16:08:42 |
8       |   98          |   2       |   26.75       |   2014-01-20 16:13:23 |

在此表中,我需要为每个用户的第一个项目报价和每个用户的最后一个报价选择数据。

因此,如果我为每个用户(不同的)选择第一个商品,返回数据应该是这样的:

bid_id  |   buyer_id    |   item_id |   amount      |   time                |
1       |   97          |   1       |   44.26       |   2014-01-20 15:53:16 |
2       |   98          |   2       |   30.47       |   2014-01-20 15:54:52 |
3       |   97          |   2       |   40.05       |   2014-01-20 15:57:47 |

如果我为每个用户选择最后的报价,返回应该是这样的:

bid_id  |   buyer_id    |   item_id |   amount      |   time                |
5       |   97          |   1       |   39.99       |   2014-01-20 16:01:13 |
6       |   97          |   2       |   24.68       |   2014-01-20 16:05:35 |
8       |   98          |   2       |   26.75       |   2014-01-20 16:13:23 |

因为我必须为每个用户带来每个项目,所以我尝试对 buyer_iditem_id GROUP BY,然后 选择 timebid_idMIN 值。但它总是首先返回我的 bid_id 但最新的 amount 行(实际上是最后的报价)。

这是我试过的查询:

SELECT MIN(`bid_id`) AS `bid_id`,`buyer_id`,`item_id`,`amount`,`time` FROM `offers` GROUP BY `buyer_id`,`item_id`

结果是:

bid_id  |   buyer_id    |   item_id |   amount      |   time                |
1       |   97          |   1       |   39.99       |   2014-01-20 16:01:13 |
2       |   97          |   2       |   24.68       |   2014-01-20 16:05:35 |
3       |   98          |   2       |   26.75       |   2014-01-20 16:13:23 |

如您所见,它分组依据并且 ID 正确,但其余行值不正确。

如何在分组购买多列时正确地SELECT第一行和/或最后一行?

最佳答案

SELECT o.`bid_id`,o.`buyer_id`,o.`item_id`,o.`amount`,o.`time` FROM `offers` o
JOIN
(SELECT MIN(`bid_id`) AS `bid_id`,`buyer_id`,`item_id`,`amount`,`time` FROM `offers` GROUP BY `buyer_id`,`item_id`)x
ON x.bid_id=o.bid_id  AND x.buyer_id=o.buyer_id

关于MySQL:按多列分组时选择第一行或最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21261356/

相关文章:

mysql - 按相关两列分组

javascript - 使用 jQuery 选择输入字段中括号之间的文本

javascript从选择返回错误

mysql - 使用 SELECT 进行 SQL 删除

mysql - 在语句中插入查询

MySQL 将重复行计为一个

mysql - sql查询出了什么问题?

带有 group by 子句的 SQL 查询,但计算两个不同的值,就好像它们是相同的

mysql - 如何确定字段/列是否受 UPDATE 语句影响

mysql - 将日期设置为三天前