使用空值选择组中的最大日期和最小日期

时间:2019-05-26 03:22:35

标签: mysql

我正在尝试从两个不同的表中查找应用程序中用户的最大日期和最小日期,但是一个表中存在某些用户,另一些表中存在某些用户,

这是我的桌子的一个例子

Table A:
Id  Action        Date
1   A           2019-01-19
1   B           2019-02-19
2   A           2019-02-19
2   B           2019-03-19
3   A           2019-05-19
3   B           2019-06-19

Table B:
Id  Action      Date
1   A           2019-01-19
1   B           2019-02-19
2   A           2019-03-19
2   B           2019-04-19
4   A           2019-05-19
4   B           2019-06-19

每个表代表用户正在执行的某些操作及其发生的日期。它们是不同的独立操作,因此不可能将它们放在一张表中。本示例中的ID是用户ID。

什么是在用户ID中联接两个表,并找到所有操作的最大和最小日期。因此,在上面的示例中,我希望结果类似于

Result:
Id   Min         Max         
1    2019-01-19  2019-02-19  
2    2019-02-19  2019-04-19
3    2019-05-19  2019-06-19
4    2019-05-19  2019-06-19

我尝试做的事情是这样的:

SELECT A.Id, LEAST(min(A.Date), min(B.Date)), GREATEST(max(A.Date, B.Date))
FROM A
JOIN A.Id = B.Id
GROUP BY A.Id

但是这显然是不对的,因为它仅按表A中的用户进行分组,而将仅按表B中的用户进行分组。我开始使用完全联接,但是由于用户可能没有按组语句,因此出现分组问题存在于任何一个表中。

我确信我已经完全将其复杂化了,因此,由于数据已经被收集,因此除了结构重组之外,请随时引导我朝着有意义的方向进行。

这是SQL Fiddle:http://sqlfiddle.com/#!9/74ce9f/9

1 个答案:

答案 0 :(得分:0)

我们可以尝试对两个表进行合并,然后通过id进行汇总:

SELECT
    Id,
    MIN(Date) AS Min,
    MAX(Date) AS Max
FROM
(
    SELECT Id, Date FROM A
    UNION ALL
    SELECT Id, Date FROM B
) t
GROUP BY Id;