Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужно к каждому отказу (cтатус D) вывести время по последнему до него статусу / 3 сообщений из 3, страница 1 из 1
21.05.2020, 13:51
    #39960293
Luna17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно к каждому отказу (cтатус D) вывести время по последнему до него статусу
Здравствуйте есть таблица с юзерами и их статусами платежей:

User Time Status
1 7:00 A
1 7:28 D
1 8:01 D
1 9:50 A
1 10:00 D
1 11:00 A
2 8:09 A
2 9:55 A
2 10:30 D
2 11:10 A

Нужно к каждому отказу (cтатус D) вывести время по последнему до него статусу А.
Чтобы получилось так:

User Time_D Time_A
1 7:28 7:00
1 8:01 7:00
1 10:00 9:50
2 10:30 9:55

Подскажите, что можно использовать?

Заранее спасибо за любые подсказки!
...
Рейтинг: 0 / 0
21.05.2020, 14:20
    #39960300
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно к каждому отказу (cтатус D) вывести время по последнему до него статусу
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
--таблица с юзерами и их статусами платежей
WITH CTE(USERR,TIMES,STATUSS)AS
(
  SELECT 1, '07:00:00','A'
    UNION ALL
  SELECT 1,'07:28:00','D'
   UNION ALL
  SELECT 1,'08:01:00','D'
   UNION ALL
  SELECT 1,'09:50:00','A'
   UNION ALL
  SELECT 1,'10:00:00','D'
   UNION ALL
  SELECT 1,'11:00:00','A'
   UNION ALL
  SELECT 2,'08:09:00','A'
   UNION ALL
  SELECT 2,'09:55:00','A'  
   UNION ALL
  SELECT 2,'10:30:00','D'
   UNION ALL
  SELECT 2,'11:10:00','A'         
)
--Нужно к каждому отказу (cтатус D) вывести время по последнему до него статусу А.
SELECT C.USERR,C.TIMES,C.STATUSS,X.TIMES,X.STATUSS
FROM CTE AS C
CROSS APPLY
(
  SELECT TOP 1 A.USERR,A.STATUSS,A.TIMES
  FROM CTE AS A
   WHERE A.USERR=C.USERR AND A.STATUSS='A' AND A.TIMES<C.TIMES
   ORDER BY A.TIMES DESC
)X
WHERE C.STATUSS='D'
...
Рейтинг: 0 / 0
21.05.2020, 19:42
    #39960443
Luna17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно к каждому отказу (cтатус D) вывести время по последнему до него статусу
londinium,
СПАСИБО Вам огромное!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужно к каждому отказу (cтатус D) вывести время по последнему до него статусу / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]