2013-07-09 7 views
0

У меня есть заказ в запросе mssql, который необходимо заказывать сложным способом. Я мог бы решить это с помощью курсора, но это не оптимальное решение.Комплексный заказ

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

дата ---- ---- пользователь действие (1 является записью 2 является выходом)

0622 ---- 4 --------- 1

0627 - --- 4 --------- 2

0623 ---- 1 --------- 1

0624 ---- 1 --------- 2

0624 ---- 3 --------- 1

0630 ---- 3 - -------- 2

0701 ---- 4 --------- 1

0703 ---- 4 --------- 2

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

Спасибо за помощь,

+3

Что такое текущий запрос? –

ответ

1

Вот мое решение:

select 
    your_table.[date], 
    your_table.[user], 
    your_table.[action] 
from your_table 
order by 
    (case when your_table.[action]=1 then your_table.[date] else (select max(t.[date]) from your_table t where t.[action]=1 and t.[user]=your_table.[user] and t.[date]<=your_table.[date]) end), 
    your_table.[user], 
    your_table.[action]; 
+0

Извините, что не ответил ранее, я должен проверить ваше решение, которое я скоро сделаю –

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