cte 使用实例:排除节假日及周六日,按照工作时段统计时间差
发布人:shili8
发布时间:2025-01-16 18:19
阅读次数:0
**CTE(Common Table Expression)使用实例**
CTE(Common Table Expression)是一种临时结果集,可以在 FROM 子句中使用一次或多次。它类似于子查询,但更方便、更高效。
###1. 排除节假日及周六日我们可以使用 CTE 来排除节假日和周六日的数据。
sqlWITH -- 定义一个临时结果集,包含所有工作日 work_days AS ( SELECT DATE '2022-01-01' + INTERVAL '1 day' * ROW_NUMBER() OVER (ORDER BY id) AS date FROM information_schema.tables t1, information_schema.columns c1 WHERE TRUE ), -- 定义一个临时结果集,包含节假日和周六日 holidays_and_weekends AS ( SELECT DATE '2022-01-01' + INTERVAL '1 day' * ROW_NUMBER() OVER (ORDER BY id) AS date FROM information_schema.tables t1, information_schema.columns c1 WHERE -- 节假日和周六日的逻辑 MOD(WEEKDAY(DATE '2022-01-01' + INTERVAL '1 day' * ROW_NUMBER() OVER (ORDER BY id)),7) IN (0,6) ) -- 使用 CTE 来排除节假日和周六日的数据SELECT * FROM work_days wWHERE date NOT IN (SELECT date FROM holidays_and_weekends);
###2. 按照工作时段统计时间差我们可以使用 CTE 来按照工作时段统计时间差。
sqlWITH -- 定义一个临时结果集,包含所有数据 all_data AS ( SELECT id, timestamp, DATEDIFF(HOUR, timestamp, NOW()) /8 AS work_hour FROM your_table ) -- 使用 CTE 来按照工作时段统计时间差SELECT work_hour, COUNT(*) AS count, SUM(DATEDIFF(SECOND, timestamp, NOW())) /1000 AS total_timeFROM all_dataGROUP BY work_hour;
###3. 不少于1500字我们可以使用 CTE 来不少于1500字的数据。
sqlWITH -- 定义一个临时结果集,包含所有数据 all_data AS ( SELECT id, content, LENGTH(content) /1000 AS word_count FROM your_table ) -- 使用 CTE 来不少于1500字的数据SELECT * FROM all_dataWHERE word_count >=1.5;
###4. 有部分代码示例和代码注释我们可以使用 CTE 来有部分代码示例和代码注释。
sqlWITH -- 定义一个临时结果集,包含所有数据 all_data AS ( SELECT id, code, comment, LENGTH(code) /1000 AS line_count FROM your_table ) -- 使用 CTE 来有部分代码示例和代码注释SELECT * FROM all_dataWHERE line_count >=1.5;
以上是使用 CTE 的实例,包括排除节假日及周六日、按照工作时段统计时间差、不少于1500字以及有部分代码示例和代码注释。这些实例展示了 CTE 在数据处理中的应用和优势。