SQL查询:GROUP BY,LEAST并返回整个组

时间:2018-06-27 10:18:04

标签: mysql sql r group-by conditional-statements

这是我的previous question中的一个连续问题。我想编写一个SQL查询,查询条件复杂的几列。我正在使用RMySQL包开发R Studio。我的服务器是MySQL。

表看起来像这样。

organisation    Tour_ID             A           B           C           D  
Ikea                  a    2018-04-01  2018-05-07  2018-05-09  2018-05-01
Ikea                  a    2018-06-01  2018-05-03  2018-05-29          NA   
Ikea                  a    2018-04-02  2018-05-01  2018-07-08  2018-05-26 
Ikea                  b    2018-06-02  2018-05-01          NA  2018-05-26
Ikea                  b    2018-06-02  2018-05-01          NA  2018-05-26
Ikea                  b            NA  2018-05-05  2018-08-02  2018-06-01
Ikea                  c    2018-06-01  2018-05-07  2018-05-09  2018-05-01
Ikea                  c    2018-06-01  2018-05-03          NA          NA   
Ikea                  c    2018-08-02  2018-05-09  2018-07-08  2018-05-26

这就是我想要做的:

  1. 过滤organisation = Ikea
  2. 中的行
  3. Tour_ID分组,例如:

    organisation    Tour_ID             A           B           C           D  
    Ikea                  a    2018-04-01  2018-05-07  2018-05-09  2018-05-01
    Ikea                  a    2018-06-01  2018-05-03  2018-05-29          NA   
    Ikea                  a    2018-04-02  2018-05-01  2018-07-08  2018-05-26 
    
    
    Ikea                  b    2018-06-02  2018-05-01          NA  2018-05-26
    Ikea                  b    2018-06-02  2018-05-01          NA  2018-05-26
    Ikea                  b            NA  2018-05-05  2018-08-02  2018-06-01
    
    
    Ikea                  c    2018-06-01  2018-05-07  2018-05-09  2018-05-01
    Ikea                  c    2018-06-01  2018-05-03          NA          NA   
    Ikea                  c    2018-08-02  2018-05-09  2018-07-08  2018-05-26
    
  4. 在每个Tour_ID组中的
  5. 中,查看列ABCD中最早的日期。如果组中四列中最早的日期在2018-05-012018-05-31之间,则返回整个组。如果一行包含NA值,我想忽略NA并查看其余值中最早的日期是什么。例如,对于Tour_ID = a组,最早的日期是2018-04-01,因此它不符合条件。

最后,只有Tour_ID = bTour_ID = c符合条件的组。结果应该是:

organisation    Tour_ID             A           B           C           D
Ikea                  b    2018-06-02  2018-05-01          NA  2018-05-26
Ikea                  b    2018-06-02  2018-05-01          NA  2018-05-26
Ikea                  b            NA  2018-05-05  2018-08-02  2018-06-01
Ikea                  c    2018-06-01  2018-05-07  2018-05-09  2018-05-01
Ikea                  c    2018-06-01  2018-05-03          NA          NA   
Ikea                  c    2018-08-02  2018-05-09  2018-07-08  2018-05-26

如何编写SQL查询? 这是我从上一个问题得到答案后的尝试,但我只是不知道该如何进行groupby,以及如何返回整个组而不只是返回日期最早的行。

SELECT *
FROM myTable 
WHERE organisation LIKE 'Ikea' AND
GROUP BY 'Tour_ID' AND
LEAST(COALESCE(A, '2019-01-01'), COALESCE(B, '2019-01-01'), COALESCE(C, '2019-01-01'), COALESCE(D, '2019-01-01')) >= '2018-05-01' AND
LEAST(COALESCE(A, '2019-01-01'), COALESCE(B, '2019-01-01'), COALESCE(C, '2019-01-01'), COALESCE(D, '2019-01-01')) < '2018-06-01';

('2019-01-01'将替换NA)

谢谢您的帮助!

0 个答案:

没有答案