J'ai une table mysql (ci-dessous) avec quelques valeurs, j'ai besoin d'obtenir les nouvelles valeurs et les valeurs en double
J'ai essayé SELECT *, COUNT (SerialNumber) FROM config_log GROUP BY SerialNumber
;
Mais il ne renvoie que le nombre de doublons. Comment trouver ça ???
Merci
Tableau:
Id SerialNumber ConfigDate Type Name ---+--------------+------------+----------+------- 1 11111 2018-12-22 New a 2 22222 2018-12-22 New b 3 33333 2018-12-22 New c 4 11111 2018-12-23 Duplicate a
Tableau des produits:
ProductId Name -----------+------ 1 a 2 b 3 c
Résultat attendu
Id SerialNumber ConfigDate ProductId ---+--------------+-----------+--------- 1 11111 2018-12-22 1 2 22222 2018-12-22 2 3 33333 2018-12-22 3 4 11111 2018-12-23 1
3 Réponses :
Vous pouvez essayer ci-dessous -
DEMO strong>
select id,SerialNumber,ConfigDate, case when num=1 then 'New' else 'Duplicate' end as Type, productid,name from ( SELECT @row_number:=CASE WHEN @SerialNumber = SerialNumber THEN @row_number + 1 ELSE 1 END AS num, @SerialNumber:=SerialNumber as PSerialNumber, id, SerialNumber,ConfigDate,productid,name FROM t1 left join product on productid=pid ,(SELECT @SerialNumber:=0,@row_number:=0) AS t order by SerialNumber )A
Merci mec. son travail, j'ai besoin de rejoindre une autre table avec ce comment c'est possible ???
@ JIJOMONK.A, pourriez-vous s'il vous plaît ajouter ce tableau à votre question
@ JIJOMONK.A, vérifiez ici - dbfiddle.uk/…
Merci mon frère. Merci pour le soutien.
la requête mysql suivante produira le résultat attendu
SELECT cl.*, IF (cl.id = (SELECT Min(id) FROM `config_log` WHERE cl.serialnumber = serialnumber ORDER BY id ASC), 'NEW', 'DUPLICATE') AS type, p.name FROM `config_log` AS `cl` INNER JOIN products AS p ON p.id = cl.productid
Testé sur mysql Distrib 5.7.24, pour Linux (x86_64)
Merci mon frère
comment écrire où une condition comme type = 'NEW' ou type = 'DUPLICATE'
vous pouvez ajouter en fin de compte comme ceci "HAVING type = 'DUPLICATE'" .. Cela peut paraître pas logique d'ajouter avoir sans group by mais ça marche .. pas la meilleure solution ... mieux vaut refaire la requête si vous avez exigences différentes
pour filtrer le résultat, vous pouvez utiliser comme ceci
SELECT cl.*, IF (cl.id = (SELECT Min(id) FROM `config_log` WHERE cl.serialnumber = serialnumber ORDER BY id ASC), 'NEW', 'DUPLICATE') AS type, p.name FROM `config_log` AS `cl` INNER JOIN products AS p ON p.id = cl.productid HAVING type = 'DUPLICATE'
quelle est votre version mysql
Version du serveur: 10.1.28-MariaDB