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

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
yaten
проходил мимо
Сообщения: 1
Зарегистрирован: 2015-04-08 12:03:49

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

Непрочитанное сообщение yaten » 2015-04-08 12:14:13

Добрый день!

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

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

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 не работает.
Весь мозг сломал уже...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

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

Непрочитанное сообщение Electronik » 2015-04-09 13:23:50

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
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

snorlov
подполковник
Сообщения: 3929
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

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

Непрочитанное сообщение snorlov » 2015-04-09 16:59:18

Фигня какая то у вас, при изменении тарифа у вас должна добавляться запись со старым account_id и новыми id и tarif_id, при этом до внесения этой записи вы должны определить предыдущий tarif_id, чтобы его загнать в prev_tarif_id

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

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

Непрочитанное сообщение Electronik » 2015-04-09 18:12:19

и дату смены тарифа
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог