2017-02-22 7 views
0

У меня есть DataTable в следующем форматеКак запросить GroupBy в следующей ситуации

Id LocationId UserName Startdate 
1  10  xz  2017-02-21 09:05:20 
2  10  xz  2017-02-21 09:15:20 
3  10  xz  2017-02-21 09:25:20 
4  10  xz  2017-02-21 09:35:20 
5  11  xy  2017-02-21 09:45:20 
6  11  xy  2017-02-21 09:55:20 
7  11  xy  2017-02-21 10:05:20 
8  11  xy  2017-02-21 10:15:20 
9  10  xz  2017-02-21 10:15:20 
10  10  xz  2017-02-21 10:25:20 

Я хочу, чтобы вычислить STARTTIME время окончания и differnce времени,

и есть шоу запись как

Id  locationId startdate  starttime   endtime timespan 
1   10  2017-02-21 09:05    09:35:20 0hr 30min0sec    
2   11 2017-02-21  09:05    09:35:20 0hr 30min0sec 
3   10 2017-02-21  10:15    10:25  0hr 10min 0sec  
+0

Вы на самом деле имеете в виду, что у вас есть объект DataTable в приложении VB или вы имеете в виду, что у вас есть таблица в базе данных? Кроме того, какие здесь правила? Вы просто хотите группировать последовательные записи с тем же «LocationId»? Примеры велики, но нам все еще нужно описание правил, которые определяют КАЖДЫЙ случай. – jmcilhinney

ответ

-1

Если вы имеете в виду SQL, я надеюсь, что следующие могут вам помочь:

WITH TEST AS(
SELECT *, 
CASE WHEN LAG(LocationId,1) OVER(ORDER BY ID) != LocationId 
    OR LAG(LocationId,1) OVER(ORDER BY ID) IS NULL 
    THEN ID 
    ELSE 0 END FLAG 
FROM [dbo].[DATATABLE]),` 
`GroupData AS(
SELECT [LocationId],[UserName],[startdate],MAX(MI.FLAG) FLAG FROM TEST JOIN 
(SELECT FLAG FROM TEST 
WHERE FLAG != 0) MI ON TEST.ID >= MI.FLAG 
GROUP BY [ID],[LocationId],[UserName],[startdate],TEST.FLAG)` 
`SELECT LocationID,MIN([startdate]),MAX([startdate]) FROM GroupData 
GROUP BY FLAG,LocationID 
Смежные вопросы