2013-03-29 4 views
-1

Я работаю с системой базы данных в столовой и пытаюсь разработать хранимую процедуру.Удалить несколько записей из таблицы

empcode time   date     item 
------------------------------------------------------------- 
005153 08:45:03 05/10/2012 12:00:00 AM BREAKFAST **** 
005153 08:45:04 05/10/2012 12:00:00 AM BREAKFAST **** 
005153 13:48:47 05/10/2012 12:00:00 AM LUNCH 
005153 17:40:33 05/10/2012 12:00:00 AM BREAKFAST 

Отмеченные записи являются предметом озабоченности. Я хочу выбрать только одну запись. Это должно быть сделано в отношении временных интервалов. Есть несколько сотрудников, и каждый из них имеет разный временной интервал на завтрак. Отобранный сотрудник имеет два слота для завтрака. Поэтому он должен выбирать один из одного временного интервала один от другого.

Выход должен быть примерно таким.

empcode time   date     item 
------------------------------------------------------------- 
005153 08:45:03 05/10/2012 12:00:00 AM BREAKFAST 
005153 13:48:47 05/10/2012 12:00:00 AM LUNCH 
005153 17:40:33 05/10/2012 12:00:00 AM BREAKFAST 
+0

Вы хотите удалить повторяющиеся данные? Или просто хотите выбрать не дублированные данные? И что ты пробовал? – hims056

+3

Название похоже противоречит вопросу: когда вы говорите «удалить», вы имеете в виду «удалить строки из таблицы» или «исключить их из вывода»? – Bohemian

ответ

1

Попробуйте это: -

With cte as 
(
Select *, 
row_number() over (partition by datepart(minute,[time]),[date] order by empcode) rn 
from Employee 
) 
Select * from cte where rn=1 order by [time] 

Демо в SQL FIDDLE

0

SQL FIDDLE DEMO

В основном вам нужно найти возможные дублируется запись и выбрать один из них. Вы можете использовать ранг за, и в вашем случае он должен раздел [дата] и [item] закажите по времени, если вы хотите выбрать более раннюю запись dup в качестве вывода, а затем использовать по умолчанию по возрастанию, или еще, используйте DESC.


WITH cte 
AS 
(
    SELECT *, 
      rank() over (partition BY Date,Item ORDER BY time) rn 
    FROM Employee 
) 
SELECT [empcode],[time],[date],[item] 
FROM cte WHERE rn=1 
ORDER BY [date],[time] 
Смежные вопросы