首页 > 解决方案 > 根据日期范围排除某些产品

问题描述

例如,我有 1 年的销售数据,并且某些产品在特定日期范围内不可用。

我目前有 1 个日期范围,但如果有多个排除项,最佳做法是什么?

SELECT * FROM XXX
WHERE 
IF(Date BETWEEN '2018-11-22' AND '2019-03-28',
ID IN (8467,8468,8469,8470),
ID IN (8467,8468,8469,8470,9551,9552,9553)
)

特别是如果日期重叠,如何解决这个问题?

标签: sqlgoogle-bigquery

解决方案


如果您试图排除值,我在想:

SELECT *
FROM XXX
WHERE ID IN (8467, 8468, 8469, 8470, 9551, 9552, 9553) AND
      (Date BETWEEN '2018-11-22' AND '2019-03-28' AND
ID NOT IN (9551, 9552, 9553) OR
       Date NOT BETWEEN '2018-11-22' AND '2019-03-28'
      );

您可以为其他日期添加多对。

对于完整的解决方案,您可能需要创建一个带有 olumns 的表,例如:

  • product_id
  • start_exclusion_date
  • end_exclusion_date

然后将查询表述为:

select xxx.*
from xxx left join
     exclusions e
     on xxx.id = e.product_id and
        xxx.date >= e.start_exclusion_date and
        xxx.date <= e.end_exclusion_date
where xxx.id in ( . . . );

从长远来看,这可能更容易维护。


推荐阅读