【发布时间】:2018-02-20 00:31:14
【问题描述】:
我知道对于一些 MySQL 专业人士来说,这相当简单。我进一步意识到答案可能是figured out from other answers,但是我花了一些时间尝试构建此查询,但我似乎无法弄清楚如何将这些解决方案应用于我的情况。
我的 似乎与其他想要字段“最小值和最大值”的人不同 - 但我需要基于“最小值和最大值”的 另一个字段 的值日期字段。
给定以下结构 - 一个“用户”表和一个“条目”表:
数据样本(用于“条目”表):
id | user_id | date | value
---+---------+--------------+-------
1 1 2018-02-01 125
2 5 2018-01-15 220
3 1 2017-12-31 131
4 4 2018-01-01 77
3 1 2017-12-15 133
我想知道第一个条目的值(按日期)、最后一个条目的值(按日期)和 user_id。
结果应该是:
user_id | first_date | first_value | last_date | last_value
--------+------------+-------------+------------+-----------
1 2017-12-15 133 2018-02-01 125
4 2018-01-01 77 2018-01-01 133
5 2018-01-15 220 2018-01-15 220
虽然我想要最好的解决方案,但我一直致力于将一些查询组合起来,如下所示:
SELECT user_id, l.date AS last_date, l.value AS last_value, f.date AS first_date, f.value AS first_value
FROM user AS u
LEFT JOIN (SELECT user_id, date, value FROM entries ORDER BY date ASC LIMIT 1) AS f ON f.user_id = u.user_id
LEFT JOIN (SELECT user_id, date, value FROM entries ORDER BY date DESC LIMIT 1) AS l ON l.user_id = u.user_id
注意:这不起作用。如果我想要某人的“第一个条目”,我会编写一个查询 SELECT user_id, date, value FROM entries ORDER BY date ASC LIMIT 1 - 但是,在子查询中使用它不会产生预期的效果。
我也尝试了一些GROUP BY 查询,也没有成功。
SQL 小提琴:http://sqlfiddle.com/#!9/71599
【问题讨论】:
-
见 meta.stackoverflow.com/questions/333952/…(在 17.5k 时指出这一点感觉很奇怪)
-
@fubar - 谢谢你的小提琴!