Abdalla Ben Omran Ответов: 3

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


Как получить записи, где разница между двумя столбцами больше, чем 2 мин, а затем получить только топ-100 entreis ?

У меня есть два столбца Datetime которые они назвали :

AddedToQueue / LastStatusUpdate
2019-03-13 12:06:43.0430000 / 2019-03-21 17:50:00.0000000

вот только пример у меня есть 8000 записей и я хочу сделать запрос, чтобы найти разницу между этими двумя столбцами, где разница больше, чем 2 мин, а затем выбрать топ-100 и отсортировать их по AddesToQueue .

Я буду очень рад вашей помощи .

Что я уже пробовал:

SELECT AddedToQueue, LastStatusUpdate, LastStatusUpdate - AddedToQueue AS Difference, 
case when ( LastStatusUpdate - AddedToQueue)>2 then 'Greater than 0' else 'Less than/equal to 0' 
end as My_Flag 
FROM PrintQueue

3 Ответов

Рейтинг:
7

MadMyche

Строка 1: ограничивает результаты до 100 строк

Строка 2: вычитание одного DateTime из другого дает вам новый объект DateTime... Вы поняли, что ваши данные вернутся 1900-01-09 05:43:17.000 когда вы делаете это таким образом? Используйте DateDiff функция, чтобы дать вам единицу для работы (в данном случае минуты). Этот метод с вашими данными возвращает 11864

Строка 4: Используйте WHERE чтобы ограничить ваши возвраты только теми, где разница в минутах больше 2.

Строка 5: Используйте ORDER BY чтобы установить, по какому столбцу они будут отсортированы.

Обратите внимание, что я удалил оператор CASE; он действительно не нужен для функциональности

SELECT   TOP (100) AddedToQueue, LastStatusUpdate
     ,   Difference = DateDiff(mi,LastStatusUpdate, AddedToQueue)
FROM     PrintQueue
WHERE    DATEDIFF(mi, AddedToQueue, LastStatusUpdate) > 2
ORDER BY AddedToQueue


[no name]

@MadMyche, мне понравился ваш запрос, он дает мне то, что я хотел с простым объяснением, не могли бы вы сказать мне, в чем разница между вашим запросом и следующим запросом :

Выберите TOP 100 * из PrintQueue, где DATEDIFF(n, AddedToQueue, LastStatusUpdate) > 2
Заказ по AddedToQueue

вопрос в чем разница между Difference и Datediff ?

MadMyche

Разница между запросом, который я предоставил, и
SELECT TOP 100 * FROM... заключается ли это в том, что мой запрос возвращает только 2 столбца DateTime и добавляет третий столбец, который является разница 2 даты и времени.

вопрос в чем разница между Difference и Datediff ?
Разница это просто имя, которое я дал новому столбцу, равному функции DateDiff. Ваш первоначальный вопрос имел
LastStatusUpdate - AddedToQueue AS Difference
и вот тут-то я все и придумал.
Эти две линии являются функциональными эквивелантами

Difference = DateDiff(mi,LastStatusUpdate, AddedToQueue)
DateDiff(mi,LastStatusUpdate, AddedToQueue) as Difference
это можно использовать для присвоения имени (или переименования, он же псевдоним) значению в запросе. Я предпочитаю использовать [NewName] = формула особенно в запросах lonq которые охватывают много строк так как мне легче читать когда код отформатирован

[no name]

еще один вопрос, пожалуйста ... если я хочу дать переменную в качестве параметров, таких как next Ex :
Скрыть Код Скопировать
объявить @month int
объявить @year int
set @month = 6
set @year = 2019

выберите топ 1 имя принтера
из PrintQueue
где месяц(AddedToQueue) = @месяц и год (AddedToQueue)=@год
группа по имени принтера
заказ по количеству(имя принтера) desc


даже чтобы иметь возможность менять год и месяц ... правильно ли я поступила ?!

MadMyche

Да

[no name]

О боже, большое спасибо за то, что ты мне все объяснил .

Рейтинг:
20

OriginalGriff

SELECT TOP 100 ... CASE WHEN DATEDIFF(mi, LastStausUpdate, AddedToQueue) > 2 THEN ...
ORDER BY ...
Вам нужен порядок ПО или SQL может использовать любые критерии, которые ему нравятся, чтобы выбрать, какие строки отображать.


Maciej Los

5ed!

[no name]

@OrginalGriff, спасибо за ваш ответ, но так же, как и я
Выберите топ-100 случаев, когда DATEDIFF(mi, LastStatusUpdate, AddedToQueue) > 2

От ДБО.Очередь печати;

это не работает .. извините, я новичок в SQL .

OriginalGriff

"это не работает" ничего нам не говорит!
Что он сделал такого, чего вы не ожидали, или не сделали того, что вы сделали?

Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.

[no name]

- Благодарю вас .. у меня есть решение . вы мне помогли

Рейтинг:
13

Maciej Los

Цитата:
Как получить записи, где разница между двумя столбцами больше, чем 2 мин, а затем получить только топ-100 entreis ?


Тебе нужно писать предложение WHERE[^] с функция DateDiff[^] метод:
SELECT TOP (100) ...
FROM ...
WHERE DATEDIFF(mi, LastStausUpdate, AddedToQueue) > 2