gpt4 book ai didi

mysql - 如何仅显示每个帐户的第二次购买

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

我有一个交易表,其中显示了多个帐户进行的各种交易。有些只生产一个,有些则不止于此。目前,我的 SQL 打印出每个帐户的第一次购买,但我需要它打印出每个帐户的第二次购买

SELECT account_id
, purchase_date as second_purchase
, amount as second_purchase_amount
FROM Transactions t
WHERE purchase_date NOT IN (SELECT MIN(purchase_date)
FROM Transactions m
)
GROUP BY account_id
HAVING purchase_date = MIN(purchase_date);

选择第二次购买日期和金额需要更改哪些内容?我尝试添加 account_id 的计数,但它给了我错误的值。

最佳答案

您可以使用变量来分配行号并获得第二次购买。

SELECT account_id,purchase_Date,amount 
FROM (
SELECT account_id
,purchase_date
,amount
--, @rn:=IF(account_id=@a_id and @pdate <> purchase_date,@rn+1,1) as rnum
,case when account_id=@a_id and @pdate <> purchase_date then @rn:=@rn+1
when account_id=@a_id and @pdate=purchase_date then @rn:=@rn
else @rn:=1 end as rnum
, @pdate:=purchase_date
, @a_id:=account_id
FROM Transactions t
CROSS JOIN (SELECT @rn:=0,@a_id:=-1,@pdate:='') r
ORDER BY account_id, purchase_date
) x
WHERE rnum=2

其工作原理说明:

  • @rn:=0,@a_id:=-1,@pdate:='' - 声明3个变量并初始化它们,@rn用于分配行号,@a_id保存 account_id 和@pdate 保存purchase_date。

  • 对于第一行(按 account_id 和 buy_date 排序),将比较 account_id 和 @a_id、@pdate 和purchase_date。由于它们不相等,when 条件失败,else 部分将分配 @rn=1。此外,变量赋值发生在这之后。 @aid 和@pdate 将更新为当前行的值。对于第二行,如果它们是相同的帐户并且在不同的日期,则将执行第一个 when 条件,并且 @rn 将增加 1。如果存在平局,则执行第二个 when 条件将被执行并且@rn 保持不变。您可以运行内部查询来检查变量的分配方式。

关于mysql - 如何仅显示每个帐户的第二次购买,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41893913/

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