1

SQL Server 2005 に 2 つのフィールド datetime を持つテーブルがあります。1 つは Start と End です。

select Start , End   from   launchings   where id = 210423 order by 1 asc

私の結果は

2013-11-01 08:30:00.000 2013-11-01 12:00:00.000
2013-11-01 13:00:00.000 2013-11-01 19:00:00.000
2013-11-01 19:00:00.000 2013-11-01 20:00:00.000
2013-11-01 19:00:00.000 2013-11-01 20:00:00.000

2013-11-04 08:30:00.000 2013-11-04 12:00:00.000
2013-11-04 13:00:00.000 2013-11-04 19:30:00.000

1日の最初と最後の時間と、それらの間の間隔を取得する必要があります。たとえば、昼食時間です

例 Day 04 - 望む結果

    Day         Start   Start interval   End interval   End
2013-11-04 -    08:00      12:00             13:00      19:30    
2013-11-01 -    08:30      12:00             13:00      20:00   

私がやった開始と終了。インターバルが必要

  SELECT 
    convert(char(10), DATEADD(DAY, DATEDIFF(DAY, 0, Inicio), 0),103) AS Day,    
    MIN(convert(char(5),Inicio,108)) AS MinDate,    
    MAX(convert(char(5),Fim,108)) AS MaxDate

from   Lancamentos where matricula = 210423 
GROUP BY
    DATEADD(DAY, DATEDIFF(DAY, 0, Inicio), 0)

結果

Day         MinDate MaxDate
01/11/2013  08:30   20:00
04/11/2013  08:30   19:30
4

2 に答える 2

0
--GarethD you still missed the SQL 2005 part of the question on the second line.
--But I think it's easy you should meant something like this: 

--Didn't test it.`
WITH RankedData AS
(   SELECT  [Date] = DATEADD(DAY, DATEDIFF(DAY, 0, Start), 0),
            [Start],
            [End],
            RowNum = ROW_NUMBER() OVER(PARTITION BY ID, DATEADD(DAY, DATEDIFF(DAY, 0, Start), 0) ORDER BY Start)
    FROM    Launchings
    WHERE   ID = 210423
)
SELECT  Date,
        [Start1] = MIN(CASE WHEN RowNum = 1 THEN Start END),
        [End1] = MIN(CASE WHEN RowNum = 1 THEN [End] END)
        [Start2] = MIN(CASE WHEN RowNum > 1 THEN Start END),
        [End2] = MAX(CASE WHEN RowNum > 1 THEN [End] END)
FROM    RankedData
GROUP BY Date;`
于 2015-02-14T19:13:50.757 に答える