Если цель состоит в том, чтобы вернуть самый последний титул для обзора «мобильный» и «ПК», я бы что-то вроде этого:
SELECT q.username
, MAX(q.pc_date) AS pc_date
, MAX(p.title) AS pc_title
, MAX(q.mobile_date) AS mobile_date
, MAX(r.title) AS mobile_title
FROM (SELECT t.username
, MAX(IF(t.via_mobile='false',t.review_date,NULL) AS pc_date
, MAX(IF(t.via_mobile='true',t.review_date,NULL) AS mobile_date
FROM tripadvisor t
WHERE t.username <> ''
AND t.via_mobile IN ('true','false')
GROUP
BY t.username
) q
LEFT
JOIN tripadvisor p
ON p.username = q.username
AND p.review_date = q.pc_date
AND p.via_mobile = 'false'
LEFT
JOIN tripadvisor r
ON r.username = q.username
AND r.review_date = q.mobile_date
AND r.via_mobile = 'true'
GROUP
BY q.username
Если у пользователя есть только «мобильные» обзоры и нет отзывов «pc», этот запрос вернет строку, но с значениями NULL для столбцов «pc». Аналогично, запрос возвращает значения NULL для «мобильных» столбцов для пользователя, имеющего только «pc» отзывы.
Запрос может быть легко изменен только для того, чтобы возвращать строки для пользователей, которые имеют как «мобильные», так и «ПК» отзывы, чтобы быть ближе к оригиналу, используя INNER JOIN.
Если цель проще, просто возвращал только самый последний обзор ...
SELECT r.username
, r.review_date
, MAX(r.title) AS title
, MAX(r.via_mobile) AS via_mobile
FROM (SELECT t.username
, MAX(t.review_date) AS max_review_date
FROM tripadvisor t
WHERE t.username <> ''
AND t.via_mobile IN ('true','false')
GROUP
BY t.username
) q
JOIN tripadvisor r
ON r.username = q.username
AND r.review_date = q.max_review_date
AND r.via_mobile IN ('true','false')
GROUP
BY r.username
, r.review_date
Результаты этого запроса несколько неопределенные, когда username
имеет несколько строк с одинаковым (последним) review_date
. Это гарантирует, что одна строка будет возвращена, но title
и via_mobile
могут быть не из одной строки.
См http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what -seems-to-me-to-be-a-very-simple-sql-query – Strawberry
«Nice Hôtel» ... смешно – Strawberry