powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужен красивый запрос
6 сообщений из 6, страница 1 из 1
Нужен красивый запрос
    #40015528
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица [dbo].[Statistic] содержит данные об отправке (Method = 'Send') и получения (Method = 'Confirm') кодов подтверждения.
В иделаьном мире код подтверждения должен прийти в течение 1 минуты (я ставлю зазор в 70 секунд) и количество отправок должно равняться количеству подтверждений.
НО это не так и бывает, что подтверждения не приходят или приходят с опозданием (более 1 минуты, что уже есть ошибка)

Мне надо выводить те телефоны, на которые НЕ пришли коды подтверждения ( tbl.[DtConfirm] is null ).
SQL запрос я написал, но мне он не очень нравится.
Можно сделать его красивее и, возможно, более быстрым (сейчас данные за 1 день (600 запписей) и даннные за полгода (около 50 000 записей) обрабатываются 5 сек.)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
declare @dtFrom datetime = '2020-10-10'


select * from
(
		select 
		[send].[HttpStatusCode], [send].DtInsert, [send].Phone
		,(
				select top 1 c.DtInsert
				from [dbo].[Statistic] as c
				where   
					c.DtInsert between [send].DtInsert and DATEADD(SECOND,70,[send].DtInsert)
					and [send].Phone = c.Phone
					and c.Method  = 'Confirm'
		 ) as [DtConfirm]
		from [dbo].[Statistic] as [send]
		where   DtInsert >= @dtFrom
			and Method  = 'Send'
) as tbl
where tbl.[DtConfirm] is null
...
Рейтинг: 0 / 0
Нужен красивый запрос
    #40015537
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with t as
(
 select
  HttpStatusCode, DtInsert, Phone, Method,
  lead(DtInsert) over (partition by Phone order by DtInsert) as DtInsert__next,
  lead(Method) over (partition by Phone order by DtInsert) as Method__next
 from
  dbo.Statistics
 where
  DtInsert >= @dtFrom
)
select
 HttpStatusCode, DtInsert, Phone, Method,
 case when datediff(second, DtInsert, DtInsert__next) <= 70 and Method__next = 'confirm' then DtInsert__next end
from
 t
where
 Method  = 'Send';
...
Рейтинг: 0 / 0
Нужен красивый запрос
    #40015541
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser,

если вам нужно выводить те телефоны на которых нет подтверждения, логично предположить что у такой записи колонка времени относящаяся к подтверждению будет пуста, тогда зачем она нужна в результирующем наборе?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
declare @dtFrom datetime = '2020-10-10'

select
      s.[Phone],
      s.[DtInsert],
      s.[HttpStatusCode]
from [dbo].[Statistic] s
where s.[Method] = 'Send'
  and s.[DtInsert] >= @dtFrom
  and not exists (select 1 from [dbo].[Statistic] r where r.[Method] = 'Confirm' and r.[DtInsert] between s.[DtInsert] and dateadd(ss, 70, s.[DtInsert]) and r.[Phone] = s.[Phone]);
...
Рейтинг: 0 / 0
Нужен красивый запрос
    #40015769
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нет, то сделайте индексы на таблицы, которых не хватает скулю ...
...
Рейтинг: 0 / 0
Нужен красивый запрос
    #40016100
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff
RegisteredUser,

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

Он же, вроде, написал, что - подтверждение может о быть, но оно за пределами разрешенного окна для получения подтверждений.
...
Рейтинг: 0 / 0
Нужен красивый запрос
    #40016130
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

а у меня что написано?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужен красивый запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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