
I
29.08.2016
05:51:59
или в цикле в Ruby?

Amir
29.08.2016
05:52:03
нет в руби :)

ojab
29.08.2016
05:52:34
select distinct on, не?
и не нужен никакой union

Google

kolas
29.08.2016
06:35:43
Amir ppp_data везде разный чтоли?

Amir
29.08.2016
06:54:23
но в запросе на конкретную дату надо строить юнионы

ojab
29.08.2016
06:59:24
если понадобились union'ы — скорее всего ты что-то делаешь не так
какой юзкейс вообще?
откуда ppp_data для каждого запроса берётся?
и откуда список ppp_id берётся?

Amir
29.08.2016
07:05:00
Вобщем так, данные такого вида:
id, ppp_id, ppp_date, cnt
1,123,'2016.01.01 10:00:00', 100
2,123,'2016.01.01 10:12:00', 101
3,123,'2016.01.01 10:33:00', 102
4,123,'2016.01.01 10:34:00', 10
5,124,'2016.01.01 10:00:00', 120
6,124,'2016.01.01 10:11:00', 123
7,124,'2016.01.01 10:12:00', 1330
8,124,'2016.01.01 10:13:00', 0
и далее
надо получить на Каждую ДатуВремя последнее значение по ppp_id к заданному времени
и все это просуммировать
допустим каждую минуту
тьфу cnt по идее нарастающий для каждого ppp_id
т.е. нужно получить последнее близкое значение к заданному времени
и по всем ppp_id просуммировать в разрезе для заданного времени

Google

Amir
29.08.2016
07:08:33
1С-ки наверно есть тут :), это как получить СрезПоследних, потом получить итоги

Alex
29.08.2016
07:12:45
Если ничего не придумаешь, то в AR можно напрямую SQL запрос сделать.
Иногда это оправдано.
Но имхо криво конечно.
Есть еще arel

ojab
29.08.2016
07:14:10
"все это просуммировать" — что просуммировать? "последнее близкое значение к заданному времени" — близкое или последнее перед ppp_date?

Amir
29.08.2016
07:14:54
последнее перед "?" на заданную датувремя

ojab
29.08.2016
07:15:38
датавремя одинаковое для всех?

Amir
29.08.2016
07:16:15
в параметре ага

ojab
29.08.2016
07:17:31
select distinct on (ppp_id) where ppp_date < ? order by id чем не подходит?

Amir
29.08.2016
07:32:31
просто не понимаю этот запрос
он наверно возмет все уникальные ppp_id меньше заданной даты
наверно, надо гуглить\

ojab
29.08.2016
07:36:39
он возьмёт все строки, где ppp_date < ?, отсортирует их по id и оставит только одну строку для каждого ppp_id

Amir
29.08.2016
07:37:21
таак

kolas
29.08.2016
07:37:33
надо еще по ppp_id выборку
where ppp_if in (1,2,3)

ojab
29.08.2016
07:40:31
>по всем ppp_id

Amir
29.08.2016
07:47:13
Я конечно дурацко объяснил задачку :)
попробую на словах
Представьте что есть нескольок десяток магазинов где продаются галоши
каждый магазин делает запись об остатке галош , с случайной периодичностью
директор магазинов потребовал вам, пройтись по магазинам и узнать сколько галош в 11 утра была в наличии
вы проходитесь по всем магазинам и в журнале регистраций находите самую последнюю запись ближнее к 11 утра и записываете в блокном кол-о галош
и отчитываетесь что в каком то магазине столько то галош, директор говорит хорошо, сколько было всего
вы берете калькулятор и суммируете и говорите результат
потом директор говорит, молодец, сходит еще узнай сколько было в 11:30 , 12:00, 12:30 и так далее до 18:00 вечера

ojab
29.08.2016
07:56:23
суммировать надо cnt?

Google

Amir
29.08.2016
07:57:40
ага
cnt от count

Artemy
29.08.2016
08:00:30
такое только запросами лучше напрямую
1. запрос дает тебе Id магазина и дату записи, типа select id,max(date) from ... where date < ...
2. на основе него юзает вложенный 1й

Amir
29.08.2016
08:01:48
Наверно сделаю как советует ПХПешник
"
ну когда мне необохдимо было подобное сделать поступал так
данные которые необходимо - консолидировать в одну-несколько независимых таблиц
допустим это кастомные price
custom_price - таблица
лью данные в custom_price_new
далее когда скрипт отработает - делается move средствами mysql, что происходит мгновенно
"

kolas
29.08.2016
08:02:46
почему не доступна то?

Artemy
29.08.2016
08:03:03
индексы? и да лочится она не должна

Amir
29.08.2016
08:03:31
нет, логические во время обновления не должны данные выдаваться

Artemy
29.08.2016
08:05:14
ты имеешь ввиду что когда таблица с сырыми данными будет обновляться, запрос будет неточные данные выводить?

Amir
29.08.2016
08:06:07
ага

Artemy
29.08.2016
08:07:45
ну тогда да, делай отчетную таблицу, ее заполняй когда необходимо, только суть будет та же, выполняешь этот долгий запрос и запихиваешь в отчетную таблицу данные
типа отчетная всегда актуальна

kolas
29.08.2016
08:10:39
а как это не точные? я так понимаю эти данные не должны изменяться
они же в прошлом

Amir
29.08.2016
08:10:49
Наверно сделаю две модели с отдельными таблицами
теперь надо придумать логику как между ними переключиться на лету
если у текущей таблицы идут обновления данные брать с другой

kolas
29.08.2016
08:11:24
ты эе не пошлешь марти с прошлое чтобы купить галоши

Alex
29.08.2016
08:11:29
вот и делай отчет has_many records

Nikolay
29.08.2016
08:11:40
а может отчетную таб лицу триггерами заполнять?

Alex
29.08.2016
08:11:48
а отчет сам по себе привязан к дате когда он создан.

Google

Nikolay
29.08.2016
08:12:06
а две модели с отдлельными таблицами это пахнет костылем

Amir
29.08.2016
08:12:11
нет там по идее надо рисовать линейный график
и очень быстро и точно

Alex
29.08.2016
08:12:37
пхпшник такой пхпшник

Amir
29.08.2016
08:12:51
:)

Alex
29.08.2016
08:12:54
Тебе надо отчет сгенерить, вот и создавай новый отчет

Nikolay
29.08.2016
08:12:56

Alex
29.08.2016
08:13:04
и ставь ему флажок finished: false

Admin
ERROR: S client not available

Nikolay
29.08.2016
08:13:14
если надо отчет - сделай рескью таск и пусть в фоне фигачит

Alex
29.08.2016
08:13:21
закончил ответ? в транзакции ставишь finished: true ему и удаляешь (если нужно) старый отчет
отчет has_many records чего то у тебя там.
Вообще да, я не заметил что ты в рамках вебморды это генеришь
whenever пригодится тебе.

Nikolay
29.08.2016
08:14:25
Да неужели
шоп ты понимал - у меня были отчеты по базам с лямами строк, которые рисовались по паре часов отдельным тазиком

Alex
29.08.2016
08:14:49
А в отчетах была фигня потому что ты тестами не обложил

Nikolay
29.08.2016
08:14:59
так что finished: true - это необходимость:)

Alex
29.08.2016
08:15:01
а рисовались пару часов потому что ты AR не оптимизировал

Google

Nikolay
29.08.2016
08:15:11
это было другой проект, и оракл

Alex
29.08.2016
08:15:22

Nikolay
29.08.2016
08:15:39

Alex
29.08.2016
08:15:51

Nikolay
29.08.2016
08:16:03
когда посчитаю что они мне нужны начну писать

Alex
29.08.2016
08:16:33

Nikolay
29.08.2016
08:16:34
а вот такое пинание - ОТВРАЩАЕТ

Alex
29.08.2016
08:16:42
Сейчас тебе кажется что это затратно и бесполезно
Это нормальное явление для того кто не писал никогда тесты.

Nikolay
29.08.2016
08:17:02

Alex
29.08.2016
08:17:16
Забавно что ты сделал такой вывод даже не попробовав.

Nikolay
29.08.2016
08:17:21

Alex
29.08.2016
08:17:30
Так возьми и напиши простой тест

Nikolay
29.08.2016
08:17:39

Alex
29.08.2016
08:17:53
а отвечает как раз тот кто вообще в тестах не шарит.
Это из опыта.

Nikolay
29.08.2016
08:18:19

Alex
29.08.2016
08:18:33
Да не пробовал ты тестами обкладывать достаточный кусок

Nikolay
29.08.2016
08:18:46