gpt4 book ai didi

mysql - 查找连接对 SQL 中的第二低值(使用排名)

转载 作者:行者123 更新时间:2023-11-29 23:08:34 25 4
gpt4 key购买 nike

所以我的一般问题是,我有两列 order.delivery_date 和 user_profiles.users,我需要找到每个用户的第二个交付日期(也称为倒数第二个值)。

我尝试了两种解决方案。第一个是尝试排除最小值,如下所示:

SELECT user_profiles.users, min(orders.delivery_date) FROM orders
LEFT JOIN user_profiles ON user_profiles.user=orders.user_id
WHERE orders.delivery_date NOT IN (SELECT user_profiles.users,
min(orders.delivery_date) FROM orders
LEFT JOIN user_profiles ON user_profiles.user=orders.user_id
GROUP BY user_profiles.users)
GROUP BY user_profiles.users

出于明显的原因,这不是一个好的解决方案

然后,我尝试为每个用户的交付日期创建排名。这样我所要做的就是为每个用户选择排名 2。但是我无法生成排名。我的代码如下:

SELECT    orders.delivery_date, user_profiles.user,
(
CASE orders.delivery_date
WHEN @curType
THEN @curRow := @curRow + 1
ELSE @curRow := 1 AND @curType := orders.delivery_date END
) + 1 AS rank
FROM orders,
(SELECT @curRow := 0, @curType := '') r
LEFT JOIN user_profiles ON user_profiles.user=orders.user_id

每次我尝试运行此程序时,都会出现此错误:“on Clause”中的未知列“orders.user_id”

任何有关如何解决我的排名问题或一般问题的想法将不胜感激。

最佳答案

简单规则:切勿在 from 子句中使用逗号。

使用交叉联接编写第二个查询:

SELECT o.delivery_date, p.user,
(CASE o.delivery_date
WHEN @curType
THEN @curRow := @curRow + 1
ELSE @curRow := 1 AND @curType := o.delivery_date
END) + 1 AS rank
FROM orders o LEFT JOIN
user_profiles p
ON up.user = o.user_id CROSS JOIN
(SELECT @curRow := 0, @curType := '') vars
ORDER BY p.user, o.delivery_date;

请注意,当您使用变量方法时,您应该有一个显式的order by,因为该机制要求数据按特定顺序排列。您的逻辑也不完整,因为同一个订单且交货日期相同的多个用户将无法正确计数。

关于mysql - 查找连接对 SQL 中的第二低值(使用排名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28182958/

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