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

如何在SQL中统计指定起止点间的行数(含起点)

正确SQL语句实现方案

首先需要精准定位起点行的日期与序列值,再分范围筛选符合条件的行统计总数。假设你的表名为product_table,用户输入的起点日期为@start_date、起点SERIAL为@start_serial,当前目标日期为'10-13-23',可通过以下两种方式实现:

方法1:使用CTE定位起点行

WITH start_info AS (
    SELECT DATE AS start_dt, SEQUENCE AS start_seq
    FROM product_table
    WHERE DATE = @start_date AND SERIAL = @start_serial
)
SELECT COUNT(*) AS target_row_count
FROM product_table pt
JOIN start_info si ON 1=1
WHERE
    -- 起点日期内,序列大于等于起点的行(包含起点)
    (pt.DATE = si.start_dt AND pt.SEQUENCE >= si.start_seq)
    -- 起点日期与目标日期之间的所有行
    OR (pt.DATE > si.start_dt AND pt.DATE < '10-13-23')
    -- 目标日期内的终点行(SEQUENCE=1)
    OR (pt.DATE = '10-13-23' AND pt.SEQUENCE = 1);

方法2:子查询嵌入条件(兼容不支持CTE的数据库)

SELECT COUNT(*) AS target_row_count
FROM product_table pt
WHERE
    (pt.DATE = @start_date AND pt.SEQUENCE >= (SELECT SEQUENCE FROM product_table WHERE DATE = @start_date AND SERIAL = @start_serial))
    OR (pt.DATE > @start_date AND pt.DATE < '10-13-23')
    OR (pt.DATE = '10-13-23' AND pt.SEQUENCE = 1);

逻辑说明

  • 第一个条件:筛选起点日期中,序列不小于起点行的所有行(确保包含起点本身)
  • 第二个条件:筛选起点日期之后、目标日期之前的所有日期的全部行
  • 第三个条件:仅保留目标日期中序列为1的终点行

通过这三个条件的组合,可精准统计出从起点行到终点行之间的总行数,避免错误统计日期范围内的所有行。

注意:若数据库对日期格式有严格要求,需用TO_DATE('10-13-23', 'MM-DD-YY')这类函数将字符串转换为数据库可识别的日期类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:03:17