2016-12-22 8 views
0

У нас есть два сервера RDS с поддержкой mysql, и перед нами стоит проблема, которую я не могу решить. Запрос, который мы используем, представляет собой простой выбор максимальной строки даты из набора данных. Это отлично работает на первом сервере, так как это неправильно работает на другом сервере даже в том же наборе данных.SQL Query не работает одинаково в двух разных серверах AWS Mysql

Запрос мы используем ниже:

SELECT `name`,last_update_date FROM 
(SELECT * FROM `table1` ORDER BY last_update_date DESC) X GROUP BY `name`; 

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

binlogging_impossible_mode 
innodb_additional_mem_pool_size 
innodb_mirrored_log_groups 
innodb_use_sys_malloc 
simplified_binlog_gtid_recovery 
sql_log_bin 
storage_engine 
thread_concurrency 
timed_mutexes 

Любая помощь приветствуется.

+0

Вам нужно определить «работать правильно», как запрос кажется излишне усложненным. – Uueerdo

+0

Вы злоупотребляете пресловутым нестандартным расширением MySQL для GROUP BY. https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html Это расширение * просто любит *, чтобы дать вам непредсказуемые результаты. –

+0

Вместо сравнения переменных вы, вероятно, должны сравнивать планы выполнения, созданные EXPLAIN на обоих серверах. http://dev.mysql.com/doc/refman/5.7/en/explain.html –

ответ

4

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

select name, MAX(last_update_date) as last_update_date 
FROM table1 
GROUP BY name 

Тот факт, что это, кажется, работает на одном сервере, просто совпадение, и это не может продолжаться.

Если вы хотите, чтобы получить всю строку, содержащую дату макс, см SQL Select only rows with Max Value on a Column