Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вывести строки с наименьшим значением поля? / 3 сообщений из 3, страница 1 из 1
21.09.2020, 23:57
    #40001134
pascorp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вывести строки с наименьшим значением поля?
Здравствуйте.
Есть таблица:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 
 id |      DateTime       | sys | dia | pulse |  ves  | numIzm | part 
----+---------------------+-----+-----+-------+-------+--------+------
  1 | 2020-09-20 12:18:03 | 157 |  87 |    87 | 129.9 |      1 |    0
  2 | 2020-09-20 12:34:59 | 147 |  86 |    84 | 129.9 |      2 |    0
  3 | 2020-09-20 22:34:19 | 148 |  84 |    94 | 131.7 |      1 |    1
  4 | 2020-09-20 22:36:08 | 136 |  77 |    94 | 131.7 |      2 |    1
  5 | 2020-09-21 13:53:28 | 166 |  92 |    79 | 130.8 |      1 |    0
  6 | 2020-09-21 13:53:28 | 159 |  87 |    78 | 130.8 |      2 |    0
  7 | 2020-09-21 23:30:08 | 134 |  77 |    95 | 132.4 |      1 |    1
  8 | 2020-09-21 23:32:22 | 138 |  76 |    93 | 132.4 |      2 |    1
  9 | 2020-09-21 23:33:46 | 138 |  76 |    93 | 132.4 |      3 |    1
Необходимо для каждой пары DateTime-part определить запись с минимальным значением поля sys и вывести только эту строку.
Пока у меня получилось так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
myHealth=# select "DateTime"::date as "Дата",case when part=0 then 'Утро' when part=1 then 'Вечер' end as "Вр.суток",min(sys) as "Верхнее", min(dia) as "Нижнее", min(pulse) as "Пульс", min(ves) as "Вес" from "myH" group by "Вр.суток","Дата" order by "Дата","Вр.суток" DESC;;
    Дата    | Вр.суток | Верхнее | Нижнее | Пульс |  Вес  
------------+----------+---------+--------+-------+-------
 2020-09-20 | Утро     |     147 |     86 |    84 | 129.9
 2020-09-20 | Вечер    |     136 |     77 |    94 | 131.7
 2020-09-21 | Утро     |     159 |     87 |    78 | 130.8
 2020-09-21 | Вечер    |     134 |     76 |    93 | 132.4
(4 строки)
Вроде бы все нормально, но не факт, что всегда для минимального sys будет минимальным и dia, не говоря уже о пульсе.
Как сделать так, что бы для минимального sys выводились значения остальных полей из этой же записи?
...
Рейтинг: 0 / 0
22.09.2020, 00:14
    #40001135
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вывести строки с наименьшим значением поля?
pascorp,

вам нужен distinct on
...
Рейтинг: 0 / 0
22.09.2020, 00:44
    #40001139
pascorp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вывести строки с наименьшим значением поля?
Спасибо. Да это видимо то, что нужно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
myHealth=# select distinct on ("Дата","Вр.суток") "DateTime"::date as "Дата",case when part=0 then 'Утро' when part=1 then 'Вечер' end as "Вр.суток",sys as "Верхнее", dia as "Нижнее", pulse as "Пульс", ves as "Вес" from "myH" order by "Дата","Вр.суток" desc,sys;
    Дата    | Вр.суток | Верхнее | Нижнее | Пульс |  Вес  
------------+----------+---------+--------+-------+-------
 2020-09-20 | Утро     |     147 |     86 |    84 | 129.9
 2020-09-20 | Вечер    |     136 |     77 |    94 | 131.7
 2020-09-21 | Утро     |     159 |     87 |    78 | 130.8
 2020-09-21 | Вечер    |     134 |     77 |    95 | 132.4
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вывести строки с наименьшим значением поля? / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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