table 存在的最后一天

Last day of existence in table

是否可以找到某个人在子集时间范围内退出前 table 最近一天的某一天?

我有类似的东西:

  SELECT 
     id
    , MAX(day) AS day
  FROM table
  WHERE 
       day >= '2018-01-01' AND day <= '2019-08-17'
       AND day != '2019-08-18'
  GROUP BY 1

我正在尝试获取日期范围为“2018-01-01”和“2019-08-17”但不在“2019”的table中的所有人-08-18'

但是,这仍然让我捕捉到在原始 table 中确实在“2019-08-18”度过了一天的人,新的 table 只是将那一天排除在外而不是找到当天确实没有记录的人

使用 having 子句:

SELECT id, MAX(day) AS day
FROM table
WHERE day >= '2018-01-01' 
GROUP BY id
HAVING MAX(day) <= '2019-08-17';

将所有条件放在 HAVING 子句中:

SELECT 
  id, 
  MAX(CASE WHEN day BETWEEN '2018-01-01' AND '2019-08-17' THEN day END) AS day
FROM table
GROUP BY id
HAVING 
  SUM(CASE WHEN day BETWEEN '2018-01-01' AND '2019-08-17' THEN 1 ELSE 0 END) > 0
  AND
  SUM(CASE WHEN day = '2019-08-18' THEN 1 ELSE 0 END) = 0