То, что я пытаюсь сделать, это связать пользователя с последней / следующей встречей, которая упорядочивается по нескольким ситуациям, например, сначала статус = 2, затем время, подтверждено и так далее. Я отфильтровал и отсортировал их, и это выглядит хорошо, однако, когда я пытаюсь получить данные первого совпадения с помощью DISTINCT, он возвращается к порядку по системе и дает мне неправильные данные.
Есть ли у вас какие-либо предложения?
SELECT User.*, NextAppointment.*, LastAppointment.*
FROM( User )
LEFT JOIN(
SELECT *, COUNT(DISTINCT( user_id ))
FROM( SELECT Appointment.id, Appointment.user_id
FROM( Appointment )
WHERE Appointment.from_time>='2020-05-26'
AND Appointment.status=1
ORDER BY Appointment.from_time, Appointment.confirmed=1 DESC, Appointment.id DESC
)NextAppointment_sub
GROUP BY user_id
)NextAppointment ON NextAppointment.user_id = User.id
LEFT JOIN(
SELECT *, COUNT(DISTINCT( user_id ))
FROM( SELECT Appointment.id, Appointment.user_id
FROM( Appointment )
WHERE Appointment.from_time<='2020-05-26'
ORDER BY Appointment.status=2 DESC, Appointment.from_time DESC, Appointment.confirmed=1 DESC, Appointment.status=1 DESC, Appointment.id DESC
)LastAppointment_sub
GROUP BY user_id
)LastAppointment ON LastAppointment.user_id = User.id AND LastAppointment.from_time >= User.FirstRequest