gpt4 book ai didi

mysql - 根据日期将排名编号分配给可能重复的行

转载 作者:行者123 更新时间:2023-11-29 01:35:14 25 4
gpt4 key购买 nike

我有一个存储出价的下表

╔════════════╦═══════════╦══════════════════════╗
║ lot_id ║ user_id ║ date ║
╠════════════╬═══════════╬══════════════════════╣
║ 123 ║ 9001 ║ 2017-08-09 14:33:55 ║
║ 123 ║ 9005 ║ 2017-08-09 14:33:55 ║
║ 123 ║ 9001 ║ 2017-08-09 14:44:55 ║
║ 124 ║ 8012 ║ 2017-08-09 14:55:55 ║
║ 124 ║ 9001 ║ 2017-08-09 14:55:55 ║
║ 124 ║ 9076 ║ 2017-08-09 14:66:55 ║
╚════════════╩═══════════╩══════════════════════╝

这个想法不是显示 user_id(出于安全原因),而是显示用户序号(顺序?),这取决于他出价的时间。我需要一个查询,它将根据日期返回first biddersecond bidderN bidder

在 PHP 中这样做效率很低。

附言提出问题有点困难,因此欢迎在问题标题中提出任何建议。

更新行号将不起作用。如果同一用户进行多次出价,则数量应该相同。例如,如果同一用户已将第一个出价设为第 10 个出价,则应显示 first bidder

最佳答案

您可以使用子查询根据日期为每个 user_id 分配一个数字。

然后将该子查询连接到出价表并使用该出价者的编号。

示例:

-- Sample data
create table bidstable (lot_id int, user_id int, `date` datetime);
insert into bidstable (lot_id, user_id, `date`) values
(123,9001,'2017-08-09 14:33:55'),
(123,9005,'2017-08-09 14:33:55'),
(123,9001,'2017-08-09 14:44:55'),
(124,8012,'2017-08-09 14:55:55'),
(124,9001,'2017-08-09 14:55:55'),
(124,9076,'2017-08-09 14:56:55');

SELECT lot_id, concat('bidder ', n) as bidder, `date`
FROM bidstable AS bids
JOIN (
SELECT user_id, @n := @n + 1 as n
FROM bidstable
CROSS JOIN (SELECT @n := 0) vars
GROUP BY user_id
ORDER BY MIN(`date`), user_id
) AS bidders ON bidders.user_id = bids.user_id
ORDER BY `date`;

SQL Fiddle 测试 here

关于mysql - 根据日期将排名编号分配给可能重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51633128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com