MariaDB / MySQL.Найти поля строк с максимальными и минимальными значениями в группе - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть этот запрос.который возвращает дневную наименьшую и наивысшую температуру:

select  year(DateTimeS),month(DateTimeS),day(DateTimeS),min(Low),max(High) from temperature
where year(DateTimeS) = 2018
group by year(DateTimeS),month(DateTimeS),day(DateTimeS)

Мне не хватает двух полей в этом запросе, LowTime и MaxTime.Я не могу понять, как получить время, когда мин (минимум) и максимум (максимум) произошли.(DateTimeS является полем DateTime, а остальные являются десятичными). Таблица содержит ежеминутные данные о температуре, например:

+-----------------------+--------+-------+
|      "DateTimeS"      | "High" | "Low" |
+-----------------------+--------+-------+
| "2018-09-07 23:58:00" | "89"   | "87"  |
| "2018-09-07 23:57:00" | "88"   | "85"  |
| "2018-09-07 23:56:00" | "86"   | "82"  |
|        .              |        |       |
|        etc...         |        |       |
+-----------------------+--------+-------+

Есть идеи?

1 Ответ

0 голосов
/ 27 сентября 2018

В MariaDB 10.3 вы должны иметь возможность использовать оконные функции.Итак:

select year(DateTimeS), month(DateTimeS), day(DateTimeS),
       min(Low), max(High),
       max(case when seqnum_l = 1 then DateTimeS end) as dateTimeS_at_low,
       max(case when seqnum_h = 1 then DateTimeS end) as dateTimeS_at_high
from (select t.*,
             row_number() over (partition by date(DateTimeS) order by low) as seqnum_l,
             row_number() over (partition by date(DateTimeS) order by high desc) as seqnum_h
      from temperature t
     ) t
where year(DateTimeS) = 2018
group by year(DateTimeS), month(DateTimeS), day(DateTimeS);
...