powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сгрупировать по дате?
16 сообщений из 16, страница 1 из 1
Как сгрупировать по дате?
    #39892636
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть поле в формате 2019-11-22 03:05:00
В течении дня есть много подобных записей, но с разным временем, а как сгруппировать по дням, т.е. отбросить время оставить только год, месяц и день?
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39892715
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

CAST('2019-11-22 03:05:00' AS DATE) или date_trunc('day', '2019-11-22 03:05:00'::TIMESTAMP)
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39892992
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если только по году и месяцу, только в функции не должно быть запятых
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893126
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sc2r2bey,

Вам совсем лень документацию смотреть,уже выше вам все разжевали?
А вы и есть за меня будете? Ага. (с)
Тот же date_trunc только с другими параметрами.
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893153
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но он не группирует
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT DATE_TRUNC('month', column1), COUNT(column1) AS "Full", SUM(CASE WHEN column2 IS NOT NULL THEN 1 ELSE 0 END) AS "Info", SUM(CASE WHEN column2 IS NULL THEN 1 ELSE 0 END) AS "Empty", "column3" 
FROM "table" 
WHERE ("type"='avia') 
AND ("column1" BETWEEN '2019-05-01 00:00:00' AND '2019-11-30 23:59:59') 
GROUP BY DATE_TRUNC('month', column1), "column1", "column3" 
ORDER BY "column1"


я где-то туплю
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893184
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sc2r2bey,
ммм ну как бы "column1" вам все портит,
да и что такое column3, я телепатическую шапку на работе оставил.
если column3 уникален или около того, вы также ничего не получите.
order by зачем по column1, навер надо Order by DATE_TRUNC('month', column1) или order by 1 что эквивалентно.
Я не знаю куда проще, это наверно сейчас с молоком матери уже впитывают.
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893185
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

почему вы ожидаете в результате группировку только год/месяц, если сами запросили группировать так же по исходному немодифицированному полю? Результат закономерен.
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893222
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Troglodit
sc2r2bey,
ммм ну как бы "column1" вам все портит,
да и что такое column3, я телепатическую шапку на работе оставил.
если column3 уникален или около того, вы также ничего не получите.
order by зачем по column1, навер надо Order by DATE_TRUNC('month', column1) или order by 1 что эквивалентно.
Я не знаю куда проще, это наверно сейчас с молоком матери уже впитывают.

да, но если я column1 уберу из группировки появляется ошибка, даже, если я уберу COUNT(column1) AS "Full",
авторArray
(
[0] => 42803
[1] => 7
[2] => ОШИБКА: столбец "table.column1" должен фигурировать в предложении GROUP BY или использоваться в агрегатной функции
LINE 1: ...UNC('days', column1), "column3" ORDER BY "column1"
column3, нет он не уникален
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893223
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот такая штука работает:
Код: plsql
1.
2.
3.
SELECT COUNT(column),  CAST(column AS DATE)
FROM table_name
GROUP BY CAST(column AS DATE)

но только по дню сортирует 2019-11-11, а мне еще по месяцу надо 2019-11
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893262
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sc2r2bey
вот такая штука работает:
Код: plsql
1.
2.
3.
SELECT COUNT(column),  CAST(column AS DATE)
FROM table_name
GROUP BY CAST(column AS DATE)

но только по дню сортирует 2019-11-11, а мне еще по месяцу надо 2019-11


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select 
	count(*), 
	extract(year from date)   :: int as year ,
	extract (month from date) :: int as month
from 
	table
group by 
	date
order by 
	year, 
	date
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893263
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sc2r2bey

да, но если я column1 уберу из группировки появляется ошибка, даже, если я уберу COUNT(column1) AS "Full",
авторArray
(
[0] => 42803
[1] => 7
[2] => ОШИБКА: столбец "table.column1" должен фигурировать в предложении GROUP BY или использоваться в агрегатной функции
LINE 1: ...UNC('days', column1), "column3" ORDER BY "column1"

column3, нет он не уникален
Вы читать не умеете, идите в 1-й класс. Я вам русским по белому написал уберите column1, очевидно что не только из списка полей, но и из order by. Такое чувство, что автору даже лень sql-92 почитать.
Я специально не пишу решение, чтобы вы все таки оторвали жопу от дивана и прочитали как пишется select с агрегатными функциями.
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893264
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimonz80,

ваше решение неверное, результат будет такой же как у автора или
если я не ошибаюсь, order by у вас не сработает и выдаст ошибку. а вот order by 2,3 нет.
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893268
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Troglodit
dimonz80,

ваше решение неверное, результат будет такой же как у автора или
если я не ошибаюсь, order by у вас не сработает и выдаст ошибку. а вот order by 2,3 нет.


очепятка там. так надо

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
	count(*), 
	extract(year from date)   :: int as year ,
	extract (month from date) :: int as month
from 
	table 
group by 
	year, 
	month
order by 
	year, 
	month
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893294
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimonz80
Troglodit
dimonz80,

ваше решение неверное, результат будет такой же как у автора или
если я не ошибаюсь, order by у вас не сработает и выдаст ошибку. а вот order by 2,3 нет.


очепятка там. так надо

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
	count(*), 
	extract(year from date)   :: int as year ,
	extract (month from date) :: int as month
from 
	table 
group by 
	year, 
	month
order by 
	year, 
	month


Мне кажется все же DATE_TRUNC('month', column1) как то проще и гибче
А вы реально пробовали запускать ваш запрос?
Если не ошибаюсь, у вас должна быть та же ошибка что и выше, никто не знает про поля year и month в group by и order by, вот
если бы был подзапрос тогда все было бы корректно.
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893300
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Troglodit
Если не ошибаюсь, у вас должна быть та же ошибка что и выше, никто не знает про поля year и month в group by и order by, вот
если бы был подзапрос тогда все было бы корректно.

Тут ошибаетесь, order by и group by про alias'ы в select уже знают. Собственно ровно потому же почему возможно делать order by 2,3.
...
Рейтинг: 0 / 0
Как сгрупировать по дате?
    #39893305
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,
Я просто запомнил, что в раньше работал order by 1,2,
но GROUP by падал на ошибке. И это был не postgres.
Сейчас проверил на древней виртуалке sql 2005-й там именно такая картина: order by работает, group by нет.
Здорово, что можно писать по-человечески.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сгрупировать по дате?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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