Страница 1 из 1

select удалить повторяющиеся строки и выбрать max

Добавлено: 2015-04-08 12:14:13
yaten
Добрый день!

Имеется таблица

Код: Выделить всё

CREATE TABLE billservice_accounttarif (
    id integer NOT NULL,
    account_id integer NOT NULL,
    tarif_id integer NOT NULL,
    datetime timestamp without time zone,
    periodical_billed boolean DEFAULT false,
    prev_tarif_id integer
);
В ней лежит соответствие id юзера - account_id и id тарифа - tarif_id.
При изменении тарифа у юзера, сюда просто добавляется новая запись с новыми account_id и tarif_id.
Мне надо получить массив в котором будут все присутствующие в таблице юзеры с их последним тарифом (актуальным).
Актуальность можно смотреть по id, он автоинрементный.

Это условие я тестю в select, когда результат будет путевый, он переедет на update, т.е. order by в update не работает.
Весь мозг сломал уже...

select удалить повторяющиеся строки и выбрать max

Добавлено: 2015-04-09 13:23:50
Electronik
order by в update
и как по вашему он в update должен работать? О_О
Мне надо получить массив в котором будут все присутствующие в таблице юзеры с их последним тарифом (актуальным).
никак, у вас на одного юзера много account_id, поэтому account_id уникален, а вот юзеры нет.

попробуте так

Код: Выделить всё

SELECT account_id, tarif_id 
FROM billservice_accounttarif
WHERE
datetime BETWEEN 'ДАТА С' AND 'ДАТА ПО'
AND
tarif_id=prev_tarif_id

select удалить повторяющиеся строки и выбрать max

Добавлено: 2015-04-09 16:59:18
snorlov
Фигня какая то у вас, при изменении тарифа у вас должна добавляться запись со старым account_id и новыми id и tarif_id, при этом до внесения этой записи вы должны определить предыдущий tarif_id, чтобы его загнать в prev_tarif_id

select удалить повторяющиеся строки и выбрать max

Добавлено: 2015-04-09 18:12:19
Electronik
и дату смены тарифа