powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом
10 сообщений из 10, страница 1 из 1
Помогите с запросом
    #40081809
jess163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Имеется таблица
idEventdateEventvalueEvent smena102021-06-30 21:41:53.0000.6 1102021-06-30 23:57:22.0005.8 1102021-06-30 23:59:09.0005.9 1102021-07-01 00:00:57.00010.9 1...102021-07-01 07:58:23.00020.02 1
Нужно сформировать запрос, который будет выдавать максимальное значение за смену текущего дня ( в моем случае 30.06).
Сейчас у меня отрабатывает так: берет максимальное значение за день 30.06(5.9) и второе значение следующего дня 01.07(20.02)
А нужно, чтобы он брал 30.06, со значением 20.02
...
Рейтинг: 0 / 0
Помогите с запросом
    #40081826
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jess163,

Код: sql
1.
select [smena], max([valueEvent]) from [table] group by [smena]


?
...
Рейтинг: 0 / 0
Помогите с запросом
    #40081843
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему не этот тогда?
2021-07-01 00:00:57.000 10.9

где тут логика?
...
Рейтинг: 0 / 0
Помогите с запросом
    #40081921
jess163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
Логика в том ,что смена начинается 30.06 в 20:00, а заканчивается 01.07 в 08:00 и нужно выбрать максимальное значение за смену. То есть 2021-07-01 07:58:23.000 20.02
...
Рейтинг: 0 / 0
Помогите с запросом
    #40081922
jess163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,
А если учесть, что это на большом промежутке дат?
...
Рейтинг: 0 / 0
Помогите с запросом
    #40081933
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
del
...
Рейтинг: 0 / 0
Помогите с запросом
    #40081995
jess163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удалось найти решение, всем спасибо
...
Рейтинг: 0 / 0
Помогите с запросом
    #40082139
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jess163,

"Удалось найти решение". Звучит так, как-будто покорили Эльбрус. Поделились бы своим решением для потомков.

Хотя задача очень простая: найти начало смены в интересующей день и конец этой же смены, тем более вы знаете, когда смена начинается и когда она заканчивается.
Код: sql
1.
2.
3.
4.
5.
6.
7.
declare @sm1   time(0)       = '20:00:00'   -- начало смены
      , @Lsm   int           = 12*60*60     -- длительность смены в секундах
      , @dt    datetime2(0)  = '20210630';  -- интересующая дата;

select @dt as dt
      ,dateadd(second, datediff(second, '00:00', @sm1), @dt)                         as sm1beg -- начало интересующей смены
      ,dateadd(second, @Lsm, dateadd(second, datediff(second, '00:00', @sm1), @dt))  as sm1end -- конец  интересующей смены



Код: plaintext
1.
2.
dt				sm1beg				sm1end
2021-06-30 00:00:00		2021-06-30 20:00:00		2021-07-01 08:00:00

Код: sql
1.
select Max(valueEvent) from table where dateEvent >= sm1beg and dateEvent < sm1end;
...
Рейтинг: 0 / 0
Помогите с запросом
    #40082241
jess163
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wlr-l,
Вставил строку
Код: plsql
1.
CAST(DATEADD(d, (DATEDIFF(hh,0, TimeStamp) - 8) /24, 0)AS DATE) AS dateEvent

, чтобы время начиная со следующего дня с 00:00 до 08:00 считалось за предыдущий день
timestamp idevent dateEvent valueEvent smena2021-07-01 00:00:57.0000000 11 2021-06-30 00:00:00.000 79.741 1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
ALTER VIEW [table1]
AS
SELECT CAST(ID AS INT) AS idEvent
	,[SRC PLSQL]CAST(DATEADD(d, (DATEDIFF(hh,0, TimeStamp) - 8) /24, 0)AS DATE) AS dateEvent
	,CAST([value] AS NUMERIC(11, 3)) AS valueEvent
	,CASE 
		WHEN datepart(HOUR, TIMESTAMP) >= '8'
			AND datepart(HOUR, TIMESTAMP) < '21'
			THEN 2
		ELSE 1
		END AS smena
FROM OPENQUERY([xxx], 'SELECT * FROM table2 where id in(10, 11, 12, 15)')
GO
...
Рейтинг: 0 / 0
Помогите с запросом
    #40082474
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jess163,

Конечно, можно стрелки часов перевести на 8 часов назад:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with A(d) as (
  select '20210630 23:59:59' union all
  select '20210701 00:00:00' union all
  select '20210701 07:59:59' union all
  select '20210701 08:00:00' --union all
)
select CAST(DATEADD(d, (DATEDIFF(hh,0, d) - 8) /24, 0)AS DATE) AS dateEvent
      ,cast(dateadd(hh, -8, d) as date) as dateEvent1
from A;


Код: plaintext
1.
2.
3.
4.
5.
dateEvent		dateEvent1
2021-06-30		2021-06-30
2021-06-30		2021-06-30
2021-06-30		2021-06-30
2021-07-01		2021-07-01

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


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