2016-10-29 2 views
0

У меня есть пример утверждения, как показано ниже;Получить последнюю строку «или» в Mysql

SELECT * FROM abctable WHERE (_variableX >= DATE_SUB(NOW(), INTERVAL 1 MONTH) AND _variableY IS NULL) OR (_variableY > NOW() - INTERVAL 1 MONTH); 

То, что я хочу сделать это, если я получаю несколько результатов «или» заявление, которое OR (_variableY > NOW() - INTERVAL 1 MONTH);, я просто хочу, чтобы получить последнюю строку этого.

Если я ограничиваю только оператор OR, я получаю сообщение об ошибке, и если я ограничу всю инструкцию, тогда у меня будет только результат X. У меня будет несколько результатов из обоих случаев, но я хочу получить весь результат от (_variableX >= DATE_SUB(NOW(), INTERVAL 1 MONTH) AND _variableY IS NULL), и я хочу получить только последний ряд из OR (_variableY > NOW() - INTERVAL 1 MONTH); заявление.

Как я могу управлять им самым простым способом?

Заранее благодарен.

Edit: Я сожалею, что я забыл упомянуть, что я хочу получить только последний элемент каждого уникального результата от второго утверждения

ответ

2

Вы не можете сделать все это в одном. Однако результат может быть получен с помощью объединения:

(SELECT * FROM abctable WHERE (_variableX >= DATE_SUB(NOW(), INTERVAL 1 MONTH) AND _variableY IS NULL)) 

UNION 

(SELECT * FROM abctable WHERE (_variableY > NOW() - INTERVAL 1 MONTH) AND _variableY in (SELECT max(_variableY) from abctable group by username) 

)

+0

Спасибо за ответ, я сожалею, что я забыл упомянуть, что я только хочу, чтобы получить последний элемент каждого уникального элемента, она может быть выполняется с помощью 'DISTINCT', используя' UNION'? –

+0

Вы можете попробовать поставить DISTINCT, как показано, и это может сработать. – djacobsdev

+0

Я пробовал, к сожалению, он не работает –

Смежные вопросы