gpt4 book ai didi

mysql - 在 MySQL 中,将每一行中的值设置为同一行上的 DATEDIFF 计算

转载 作者:可可西里 更新时间:2023-11-01 07:02:30 26 4
gpt4 key购买 nike

弄清楚这个问题的标题是非常棘手的,所以如果有人有任何改进的想法,请随时编辑:-)。

这是交易。我有一个包含大量捐款的 MySQL 表,并且每笔捐款都有一个日期。我还有一个 years_active 列。我需要运行一个查询,该查询将 SET 每一行的事件年数与每个唯一用户从第一个日期到最后一个日期的差异(以年为单位)。

这是我的起始表:

------------------------------------------------------------
| user_id | donation | date | years_active |
------------------------------------------------------------
| 1 | $10 | 2002-01-01 | null |
| 1 | $15 | 2005-01-01 | null |
| 1 | $20 | 2009-01-01 | null |
| 2 | $10 | 2003-01-01 | null |
| 2 | $5 | 2006-01-01 | null |
| 3 | $15 | 2001-01-01 | null |
------------------------------------------------------------

这是我想要实现的表格:

------------------------------------------------------------
| user_id | donation | date | years_active |
------------------------------------------------------------
| 1 | $10 | 2002-01-01 | 8 |
| 1 | $15 | 2005-01-01 | 8 |
| 1 | $20 | 2009-01-01 | 8 |
| 2 | $10 | 2003-01-01 | 4 |
| 2 | $5 | 2006-01-01 | 4 |
| 3 | $15 | 2001-01-01 | 1 |
------------------------------------------------------------

我知道像这样在多行中冗余存储 years_active 远非理想。不幸的是,这张表是用于数据可视化的,而使用我的软件,我绝对无法完全重组数据; years_active 必须在每一行中。

在我的研究中,我似乎会使用子查询来获取每个用户 ID 的 MIN 值和每个唯一用户 ID 的 MAX 值,然后执行DATEDIFF,并将结果设置到该列。但我真的不明白如何为每个唯一用户一遍又一遍地运行所有这些查询。

有人能指出我正确的方向吗?这可能吗?

最佳答案

SELECT t1.user_id, t1.donation, t1.date, t2.years_active
FROM yourTable t1
INNER JOIN
(
SELECT user_id, MAX(YEAR(date)) - MIN(YEAR(date)) + 1 AS years_active
FROM yourTable
GROUP BY user_id
) t2
ON t1.user_id = t2.user_id

点击下面的链接获取正在运行的演示:

SQLFiddle

更新:

这是一个 UPDATE 语句,它将为 years_active 列分配正确的值:

UPDATE yourTable t1 
INNER JOIN
(
SELECT user_id, MAX(YEAR(date)) - MIN(YEAR(date)) + 1 AS years_active
FROM yourTable
GROUP BY user_id
) t2
ON t1.user_id = t2.user_id
SET t1.years_active = t2.years_active

关于mysql - 在 MySQL 中,将每一行中的值设置为同一行上的 DATEDIFF 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37385150/

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