2015-08-07 2 views
3

у меня есть данные посещаемости приходить ко мне в этом формате:SQL для минимальных и максимальных значений

EmployeeId | Date | Time | 
-------------------------------------- 
     1 | 01/01/2015 | 14:01:35 | 
     2 | 01/01/2015 | 13:00:00 | 
     1 | 01/01/2015 | 17:35:37 | 
     1 | 01/01/2015 | 18:01:35 | 
     2 | 01/01/2015 | 19:14:12 | 
     1 | 01/02/2015 | 14:21:42 | 
     2 | 01/02/2015 | 15:12:03 | 
     1 | 01/02/2015 | 15:42:20 | 

Мне нужны эти данные в следующем формате:

EmployeeId | Date | FirstTime | LastTime | 
-------------------------------------------------- 
     1 | 01/01/2015 | 14:01:35 | 18:01:35 | 
     2 | 01/01/2015 | 13:00:00 | 19:14:12 | 
     1 | 01/02/2015 | 14:21:42 | 15:42:20 | 
     2 | 01/02/2015 | 15:12:03 | 15:12:03 | 

FirstTime является Min(Time) для этого date/employee и lasttime является max(time) за это date/employee. Я удалил Auto increment PK для упрощения.

Я не могу обмотать голову, как это сделать. Я думал, что Pivot может быть способом, но я не мог использовать его для желаемого эффекта. Можете ли вы мне помочь, как это сделать?

+0

заглавный пост не соответствует описанию. Вы не хотите преобразовывать строки в столбцы? –

+0

Да. Я исправлю это. Спасибо. –

ответ

7
select employeeid, date, min(time) as firsttime, max(time) as lasttime 
from tablename 
group by employeeid, date 

Вы можете группировать employeeid и выбирать минимальное и максимальное время для заданного дня.

+0

Спасибо. Это было так легко и просто и все же полностью пропустило мой разум. Пальцы вверх. –

1

Вы можете использовать Pivot, вот пример:

CREATE TABLE Product(Cust VARCHAR(25), Product VARCHAR(20), QTY INT) 
GO 
-- Inserting Data into Table 
INSERT INTO Product(Cust, Product, QTY) 
VALUES('KATE','VEG',2) 
INSERT INTO Product(Cust, Product, QTY) 
VALUES('KATE','SODA',6) 
INSERT INTO Product(Cust, Product, QTY) 
VALUES('KATE','MILK',1) 
INSERT INTO Product(Cust, Product, QTY) 
VALUES('KATE','BEER',12) 
INSERT INTO Product(Cust, Product, QTY) 
VALUES('FRED','MILK',3) 
INSERT INTO Product(Cust, Product, QTY) 
VALUES('FRED','BEER',24) 
INSERT INTO Product(Cust, Product, QTY) 
VALUES('KATE','VEG',3) 
GO 
-- Selecting and checking entires in table 
SELECT * 
FROM Product 
GO 
-- Pivot Table ordered by PRODUCT 
SELECT PRODUCT, FRED, KATE 
FROM (
SELECT CUST, PRODUCT, QTY 
FROM Product) up 
PIVOT (SUM(QTY) FOR CUST IN (FRED, KATE)) AS pvt 
ORDER BY PRODUCT 
GO 
-- Pivot Table ordered by CUST 
SELECT CUST, VEG, SODA, MILK, BEER, CHIPS 
FROM (
SELECT CUST, PRODUCT, QTY 
FROM Product) up 
PIVOT (SUM(QTY) FOR PRODUCT IN (VEG, SODA, MILK, BEER, CHIPS)) AS pvt 
ORDER BY CUST 
GO 

Относительная ссылка: link

Смежные вопросы