SQL知识点:日期边界值

一、明确时间范围判断的核心原则
‌包含边界时用 >=/<=,不包含时用 >/<‌

例:题目要求「截至 2019-07-27(包含该日期)」→ 结束日期使用 <= '2019-07-27'‌12
若未明确说明是否包含边界,默认使用等号(如 DATEDIFF(end_date, start_date) <= 90)‌13
‌模糊时间单位(年、月)优先用具体日期‌

例:「过去一年」且已知「今天是 2019-06-23」→ 直接写 dispatch_date >= '2018-06-23',避免计算 365/366 天‌24
同理,「不满一个月」→ 直接写 available_from <= '2019-05-23'(30 天差异)‌34
‌明确时间间隔时用函数计算‌

例:「最多 90 天内」→ 用 DATEDIFF('2019-06-30', login_date) <= 90‌35
需注意:DATEDIFF 是否包含当天取决于题目描述‌15

二、高频题目解法示范

题号 核心逻辑 关键代码片段
1098 排除近1个月书籍,筛选近1年订单量<10 WHERE available_from <= '2019-05-23' AND dispatch_date >= '2018-06-23' GROUP BY ... HAVING COUNT(*) < 10‌
1107 统计90天内每日首次登录用户数 WHERE DATEDIFF('2019-06-30', activity_date) <= 90 GROUP BY activity_date‌
1141 统计近30天活跃用户数(含截止日) WHERE activity_date BETWEEN DATE_SUB('2019-07-27', INTERVAL 29 DAY) AND '2019-07-27'‌

三、避免出错的细节补充
‌时间函数选择‌

DATE_SUB(end_date, INTERVAL N DAY) 比手动计算日期更可靠(自动处理跨月/年)‌12
例:近30天 → 实际是29天跨度(包含当天)‌12
‌去重与数据唯一性‌

用户类题目优先加 DISTINCT(如 COUNT(DISTINCT user_id))‌13
‌日期格式规范‌

比较时需加引号(activity_date = '2019-06-23'),避免隐式转换错误‌23

四、总结公式
‌近N天活跃用户 = 日期区间属于 [当前日期 - (N-1), 当前日期]‌
‌精确时间范围 = 直接指定日期;模糊范围 = 用时间函数动态计算‌
‌边界是否包含 → 题目描述优先,无描述默认包含

posted @ 2025-02-26 11:11  测试三思  阅读(23)  评论(0)    收藏  举报