You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构造满足日期与品种类型过滤规则的历史数据SQL查询

正确查询写法

SELECT SUM(NVL(sales, 0)) AS sales
FROM results t
WHERE t.race_date BETWEEN '12/30/2020' AND '01/02/2021'
AND (
    (t.race_date < DATE '2021-01-01' AND t.breed_type IN (1,2))
    OR
    (t.race_date >= DATE '2021-01-01' AND t.breed_type IN (1,2,3))
);

原查询错误原因

原写法没有按日期区分breed_type的过滤规则,直接将所有日期下breed_type=3的数据都纳入统计,多算了2020年12月30日breed_type=3的40、2020年12月31日breed_type=3的10,合计多算50,185减去50正好匹配你预期的135结果。

可选写法(CASE WHEN实现,可读性更高)

如果你的数据库支持CASE WHEN语法,也可以用如下方式实现相同逻辑:

SELECT SUM(
    CASE
        WHEN t.race_date < DATE '2021-01-01' AND t.breed_type = 3 THEN 0
        ELSE NVL(sales, 0)
    END
) AS sales
FROM results t
WHERE t.race_date BETWEEN '12/30/2020' AND '01/02/2021'
AND t.breed_type IN (1,2,3);

注意事项

建议统一使用YYYY-MM-DD格式的标准日期写法,避免不同数据库对MM/DD/YYYY格式的解析差异导致过滤错误。

内容的提问来源于stack exchange,提问作者Nate Johnoson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:06:03