SQL Server: запрос на выборку нечетных и четных строк из таблицы для InTime и Out Time - PullRequest
1 голос
/ 27 июля 2011

Имя таблицы: сотрудник

Id                                     EmployeeName  FingerId
8b6c653e-6b20-46f2-89a1-45ed3b453345     xyz           19
8b6c653e-6b20-46f2-89a1-45ed3b453876     abc           17

Название таблицы: INOUT

 No   AutoId                                   Fingerid       LogTime             Date
 1  8b6c653e-6b20-46f2-89a1-45ed3b45369c       19           10:43:36 AM        7/27/2011 
 2  b4246d49-df99-4355-9327-4703a7642b32       19           10:45:00 AM        7/27/2011 
 3  274e64e4-e95b-4a1c-815c-9aee9c2d3ac8       19           11:30:20 AM        7/27/2011 
 4  f7197cb8-3a76-4c75-b801-9df545ff67b1       19           12:30:00 PM    7/27/2011 
 5  43230f6d-6872-4ce4-8f3a-ceb74d757722       19           12:30:55 PM    7/27/2011 

Я хочу хранимую процедуру для этой таблицы (INOUT), в которой она имеет Fingerid конкретного сотрудника, LogTime определенного пальца и дату

Здесь, в таблице выше, есть Fingerid 19 из 5 записей с той же датой 27.07.2011

Я хочу запрос, который группируется по дате и сортируется по времени с секундами и

  • 1 запись IN TIME и 2 записи OUT TIME
  • 3 записи IN TIME и 4 записи OUT TIME

как нечетное должно быть ВРЕМЯ, а четное должно быть ВНЕ

А также разница во времени между временем и временем выхода

Вывод я хочу:

EmployeeName    InTime          OutTime          Date            DifferenceTimeperiod
  XYZ          10:43:00 AM      10:45:00 AM     7/27/2011        00:2:00 mints

1 Ответ

1 голос
/ 27 июля 2011

У меня была похожая проблема с журналами аварийных сообщений:

CREATE TABLE dbo.AlarmLogs([TimeStamp] datetime, Incoming bit, AlarmID int)

В них были записи с входящим и постепенным отключением (1,0), поэтому я знал, когда сигнализация включается или выключается.Тем не менее, иногда было бы несколько поступающих сигналов до постепенного прекращения, то есть

2011/01/01 13:55:43, 1, 246
2011/01/01 13:55:48, 1, 246
2011/01/01 13:56:14, 0, 246
2011/01/01 13:57:38, 1, 246
2011/01/01 13:58:16, 0, 246

Я потратил много времени, пытаясь решить эту проблему с помощью различных методов SQL, включая самостоятельные объединения и т. Д., Но теперь решил это с помощьюкурсор.

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

Курсор просто проходил по отсортированной таблице и вставлял сигнал тревогив таблицу результатов, как только он нашел время окончания.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...