L'une de mes requêtes group-wise maximum renvoyait des résultats inattendus. Je ramène cela à la question suivante:Troncature de DateTimes dans les sous-requêtes corrélées dans MariaDB
DROP TABLE IF EXISTS maria_bug;
CREATE TABLE maria_bug (
id INT NOT NULL,
update_time TIMESTAMP(6) NOT NULL
);
INSERT INTO maria_bug VALUES(1, '2001-01-01 00:00:00.200000');
INSERT INTO maria_bug VALUES(1, '2001-01-01 00:00:00.100000');
SELECT
m1.id,
m1.update_time t1,
(SELECT MAX(m2.update_time) FROM maria_bug m2 WHERE m1.id = m2.id) t2
FROM maria_bug m1;
sur MySQL 5.6, je reçois ceci:
1 2001-01-01 00:00:00.200000 2001-01-01 00:00:00.200000
1 2001-01-01 00:00:00.100000 2001-01-01 00:00:00.200000
Sur MariaDB (10.0.13):
1 2001-01-01 00:00:00.200000 2001-01-01 00:00:00.200000
1 2001-01-01 00:00:00.100000 2001-01-01 00:00:00.000000
Pourquoi est-ce qui se passe ?? Le comportement MYSQL est ce à quoi je m'attendrais. Y a-t-il un paramètre qui me manque quelque part dans MariaDB? Est-ce documenté quelque part? Certes, il ne peut pas être un bug dans la base de données car il est une question très commune:
SELECT COUNT(*) FROM maria_bug m1
WHERE update_time < (SELECT MAX(m2.update_time) FROM maria_bug m2 WHERE m1.id = m2.id)
La requête ci-dessus renvoie 1
dans MYSQL comme prévu, mais 0
dans MariaDB.
Un bogue est classé dans MariaDB. https://jira.mariadb.org/browse/MDEV-9707 –