Форум программистов, компьютерный форум CyberForum.ru

PostgreSQL

Войти
Регистрация
Восстановить пароль
 
ikonokot
0 / 0 / 0
Регистрация: 11.12.2016
Сообщений: 5
#1

совет новичку - посчитать к-во строк - PostgreSQL

11.12.2016, 15:41. Просмотров 259. Ответов 3
Метки нет (Все метки)

Добрый день, я совсем чайник в области sql...
Но вот очень надо написать такой скрипт:
Вот в этом скрипте нужно найти тот день, который "пересекает экватор выходных дней", то есть: знать номер дня, подходящего под это условие(holiday_flg=1) и сравнить его с максимальным номером выходного дня делёным на 2...
сейчас он считает пересечение экватора по всем дням, а надо только по выходным - я уже замучалась и не знаю, что делать(
Count и row_number считают просто все дни, как мне вычислить именно порядковый номер строки, подходящий под условие и сравнить его с максимальным ? если пишу сравнение с max(num) (вместо 183) - выдает, что нельзя использовать агрегатную функцию... Пожалуйста, помогите((

select year_no, calendar_dt,holiday_flg,ss
from
(select year_no, calendar_dt,holiday_flg,
count(holiday_flg) over(PARTITION by year_no order by calendar_dt) as num
from asql.calendar
) as ss
where (holiday_flg = 1) and num>183 and year_no= 2016
order by year_no

limit 1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2016, 15:41     совет новичку - посчитать к-во строк
Посмотрите здесь:

Совет по изучению триггеров PostgreSQL
PostgreSQL Посчитать количество записей подходящие под несколько параметров

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grgdvo
518 / 459 / 126
Регистрация: 02.09.2012
Сообщений: 1,345
11.12.2016, 16:24     совет новичку - посчитать к-во строк #2
Покажите описание вашей таблицы asql.calendar (CREATE TABLE ....) со смысловым описанием полей - что они означают по сути.
Также приведите хотя бы небольшую часть ваших данных, которые лежат в таблице, чтобы было понятно, что к чему.
Без этой информации непонятно, как исправить/переделать ваш запрос.
ikonokot
0 / 0 / 0
Регистрация: 11.12.2016
Сообщений: 5
11.12.2016, 16:46  [ТС]     совет новичку - посчитать к-во строк #3
бд содержит много полей, для меня интерес представляют 2 из них- calendar_dt - где записана дата и - holiday_flg- флаг выходного дня, если он равен 1- это выходной, если 0- то будний. задача найти и вывести день. пересекающий экватор выходных(включая праздничные дни). попыталась наваять код- пытаюсь найти наиболее близкую дату к экватору, но вылазит ошибка
select year_no,
sum(case when holiday_flg=1 then 1 else 0 end) as summm,
calendar_dt(case when min(abs(calendar_dt-summm)<5) )
from asql.calendar
where (holiday_flg=1)
group by year_no
order by year_no
Миниатюры
совет новичку - посчитать к-во строк   совет новичку - посчитать к-во строк  
grgdvo
518 / 459 / 126
Регистрация: 02.09.2012
Сообщений: 1,345
12.12.2016, 07:47     совет новичку - посчитать к-во строк #4
А если так?
SQL
1
2
3
4
5
6
7
SELECT 
calendar_dt,
holiday_flg,
abs(SUM(CASE WHEN holiday_flg=1 THEN 1 ELSE 0 END) OVER (ROWS BETWEEN unbounded preceding AND CURRENT ROW) -
SUM(CASE WHEN holiday_flg=1 THEN 1 ELSE 0 END) OVER (ROWS BETWEEN CURRENT ROW AND unbounded following)) holiday_diff
FROM calendar
ORDER BY holiday_diff ASC LIMIT 1;
Для каждой даты считаем количество выходных до данного дня, включая сам день, если он выходной, и количество выходных после данного дня. Считаем абсолютную разницу между этими количествами. Сортируем в порядке возрастания разницы и оставляем первый произвольный элемент с минимальной разницей
Yandex
Объявления
12.12.2016, 07:47     совет новичку - посчитать к-во строк
Ответ Создать тему
Опции темы

Текущее время: 22:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru