【发布时间】:2025-05-02 04:10:01
【问题描述】:
我已经为此工作了一段时间。我想知道如何才能得到这张桌子:
id open_dt ops_hrs
1 10/31/2011 7:00AM - 5:30PM
2 11/1/2011 7:00AM - 5:00PM
3 11/2/2011 7:00AM - 5:00PM
4 11/3/2011 7:00AM - 5:00PM
5 11/6/2011 7:00AM - 7:00PM
6 11/8/2011 7:00AM - 5:00PM
看起来像这个表:
max_date min_date ops_hrs
10/31/2011 10/31/2011 7:00AM - 5:30PM
11/1/2011 11/3/2011 7:00AM - 5:00PM
11/6/2011 11/6/2011 7:00AM - 7:00PM
11/8/2011 11/8/2011 7:00AM - 5:00PM
我尝试使用游标,但没有必要。此外,它必须被分组。只要连续几天休息,就会发生新的分组。任何帮助将不胜感激。
此查询将生成上述示例数据
;
WITH pdog (id, open_dt,ops_hrs) AS
(
SELECT 1, CAST('10/31/2011' AS datetime), '7:00AM - 5:30PM'
UNION ALL SELECT 2, CAST('11/1/2011' AS datetime),'7:00AM - 5:00PM'
UNION ALL SELECT 3, CAST('11/2/2011' AS datetime),'7:00AM - 5:00PM'
UNION ALL SELECT 4, CAST('11/3/2011' AS datetime),'7:00AM - 5:00PM'
UNION ALL SELECT 5, CAST('11/6/2011' AS datetime),'7:00AM - 7:00PM'
UNION ALL SELECT 6, CAST('11/8/2011' AS datetime),'7:00AM - 5:00PM'
)
SELECT * FROM pdog
【问题讨论】:
-
如果有一行
11/4/2011 7:00AM - 6:00PM会怎样? -
这将是另一个组,最小和最大日期为 11/04/2011
-
所以分组是根据 ops_hrs 的值以及前一天是否是前一天。
-
yes -- 连续几天被组合在一起
-
找到了两篇对我在SQL Server中制作游标和临时表很有帮助的文章Click here to read Temporary in SQL server Table on infoA2z.comClick here to read Cursor in SQL server on infoA2z.com
标签: sql sql-server tsql sql-server-2008 gaps-and-islands