2010-04-26 2 views
3

У меня есть запрос, я пытаюсь выбрать максимальное значение из летнего периода (нов-апрель здесь), но он дает мне только значения из nov-dec с этим запросом. Любые идеи почему?SQL select максимум из двух периодов времени

SELECT TOP 10 Value, DateTime 
    FROM history 
WHERE Tagname = @Tag 
    AND 
     ((DateTime >= @StartYear AND DateTime < @StartWinter) 
    OR 
     (DateTime >= @FinishWinter AND DateTime < @FinishYear)) 
ORDER BY Value DESC 
+0

@HamishC: добро пожаловать в SO :-) Вы можете выделить свой код и нажать ctrl-k, чтобы получить его отформатированное красиво. Кроме того, я пометил SQL-Server, потому что, я думаю, я узнал его синтаксис. Если я ошибаюсь, повторите попытку. Благодарю. – bernie

+0

приветствия, я должен добавить, что переменные @StartYear и т. Д. - это только даты для jan, may, november 2009 и jan 2010 – Raggles

+0

Каковы значения для параметров? Что такое тип данных для Value - можете ли вы сбросить DDL для таблицы здесь? – IMHO

ответ

0

Привет, спасибо за помощь всем, кажется, это проблема с нашим историком (связанным db с sql-сервером), поэтому я принимаю проблему с ними. Я попробовал запрос на регулярной основе mssql db, и он видит, что ...

0

(DateTime> = StartYear И DateTime < startwinter) дает все результаты между Яном и апреле 2009 (DateTime> finishwinter и DateTime < finishyear) дает все результаты в Нояб Дек 09.

So , вы выбираете первую десятку с января февраля марта апреля ноября декабря 2009 года. Если это то, что вы хотите выбрать, и вы получаете только значения в ноябре 2009 года, проверьте, чтобы в другие месяцы были значения?

Если @startwinter не год чувствительных вы можете также получить в январе-апреле 2010

+0

Я проверил данные, и я должен получать результаты от обоих периодов. Если я поменяю два предложения вокруг, я получаю только данные от jan-apr. Как будто эта строка полностью игнорируется ... – Raggles

+0

Если, например, у вас есть множество высоких значений, которые одинаковы для каждого из двух периодов, которые вы выбираете, тогда вы можете получить результаты, которые вы видя. Скажем, например, что 1000 было самым высоким значением в вашей таблице и что было двадцать результатов с Value = 1000, десять в jan-apr и десять в нове-дек. Вы могли бы получить десять из десяти в качестве ваших результатов, а десять из них будут зависеть от того, как вы создаете запрос. Посмотрите, если вы получите тот же результат, если используете 'ORDER BY Value DESC, DateTime'. Это может дать вам ключ. –

+0

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

0

Вы не должны использовать «ORDER BY», при использовании «ТОП-10»?

И что локаль вы живете, или, перефразировать: каковы разумные сроки для (@StartYear, @StartWinter, @FinishWinter, @FinishYear)

В Европе я ожидаю:

  • StartYear = 2010-01-01
  • FinishYear = 2010-12-31
  • StartWinter = 2010-12-20 (о)
  • FinishWinter = 2010-03-20 (о)

Итак, первый период будет проходить с 2010-01-01 по 2010-12-20 (около), а второй - с марта 2010 года до конца года.

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

+0

erm есть «ORDER BY Value DESC» на конце. Даты также упомянуты выше, Im down в NZ, поэтому jan01, май01, ноябрь01 (2009) jan01 (2010). – Raggles

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