GROUP_CONCAT 外部值和 select 内部值 returns 之间的 DATEDIFF 超过 1 行
GROUP_CONCAT with DATEDIFF between outer value and a select inner value returns more than 1 row
所以我有一个 table 的用户和 Child,我的想法是连接用户的加入日期和 child 的日期之间的日期差异。
一个特定的用户有 2 children,当我 运行 a group_concat 使用这个
SELECT u.id,GROUP_CONCAT(DATEDIFF(FROM_UNIXTIME(u.timestamp/1000),(SELECT DATE(c2.dob) FROM Child c2 WHERE c2.user_id = u.id)) SEPARATOR ',') AS childAge FROM User u
WHERE u.id = 1
GROUP BY u.id;
这给出了一个子查询returns多于1行的错误。好吧,我在子选择中 运行 按 c2.user_id 分组,但这违背了 group_concat 的目的!我刚得到第一个 child id datediff.
好吧,我已经回答了我自己的问题,在午餐时间思考了更多之后,我就是这样解决的:
SELECT u.id,(SELECT GROUP_CONCAT(DATEDIFF(FROM_UNIXTIME(u.timestamp/1000),DATE(c2.dob)) SEPARATOR ',') FROM Child c2 WHERE c2.user_id = u.id) AS childAge FROM User u
WHERE u.id = 1
GROUP BY u.id;
根据我(有限)的理解,这是可行的,因为我从 Child table 中取出单个 dob,而不是在子 select 内的 DATEDIFF 的第二半部分将它们全部抓取。
希望这对其他人有帮助
所以我有一个 table 的用户和 Child,我的想法是连接用户的加入日期和 child 的日期之间的日期差异。
一个特定的用户有 2 children,当我 运行 a group_concat 使用这个
SELECT u.id,GROUP_CONCAT(DATEDIFF(FROM_UNIXTIME(u.timestamp/1000),(SELECT DATE(c2.dob) FROM Child c2 WHERE c2.user_id = u.id)) SEPARATOR ',') AS childAge FROM User u
WHERE u.id = 1
GROUP BY u.id;
这给出了一个子查询returns多于1行的错误。好吧,我在子选择中 运行 按 c2.user_id 分组,但这违背了 group_concat 的目的!我刚得到第一个 child id datediff.
好吧,我已经回答了我自己的问题,在午餐时间思考了更多之后,我就是这样解决的:
SELECT u.id,(SELECT GROUP_CONCAT(DATEDIFF(FROM_UNIXTIME(u.timestamp/1000),DATE(c2.dob)) SEPARATOR ',') FROM Child c2 WHERE c2.user_id = u.id) AS childAge FROM User u
WHERE u.id = 1
GROUP BY u.id;
根据我(有限)的理解,这是可行的,因为我从 Child table 中取出单个 dob,而不是在子 select 内的 DATEDIFF 的第二半部分将它们全部抓取。
希望这对其他人有帮助