Как организовать выборку из таблицы MySQL?

Здравствуйте!
Есть таблица:
id_client | talk_text | current_talk_date | next_talk_date

Подскажите пожалуйста как правильно выбрать, если для конкретного id_client есть next_talk_date выше текущей то берем только их, если нету то берем где next_talk_date равно текущей дате.

UPD. Мой запрос:
SELECT * FROM tb_talks tbt LEFT JOIN tb_client tbc ON tbt.id_client=tbc.id_client WHERE tbt.id_client in (33,122,133,291) and (tbt.next_talk_date > CURRENT_DATE or tbt.next_talk_date = CURRENT_DATE) ORDER BY tbt.next_talk_date
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
По разному можно поизвращаться. Например,
select /**/ from tablename join (
    select id_client, max(next_talk_date) as last_date from tablename where id_client in (/**/) group by id_client
) lastdate using(id_client)
where id_client in (/**/) and next_talk_date >= CURRENT_DATE and (next_talk_date = last_date or next_talk_date > CURRENT_DATE)

По индексу id_client & next_talk_date должен бегать внятно.

Или так:
select /**/ from tablename t
where id_client in (/**/) and (
    next_talk_date > CURRENT_DATE or not exists (
        select 1 from tablename n 
        where n.id_client = t.id_client and n.next_talk_date > t.next_talk_date
    )
)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
taliban
@taliban
php программист
WHERE next_talk_date > date() OR next_talk_date = date() - Внимание, псевдокод!
Ответ написан
VladimirAndreev
@VladimirAndreev
php web dev
select * from table
where id=XXX
order by next_talk_date
limit 1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы