2017-09-16 4 views
2

Bonjour les gars, je suis nouveau dans mySQL et j'ai un problème avec la requête. J'essayais d'écrire une requête qui me fournissait tous les enregistrements de la table et si j'avais deux enregistrements avec la même date je n'ai besoin que d'enregistrer entre ces deux qui ont manual_selection = 1.sélectionnez toutes les lignes avec distinct et la condition dans MySQL

Donc le résultat devrait être tous les enregistrements de ma table à l'exception id = 1401 et id = 1549

my table

J'ai essayé de combiner comment puis-je obtenir ce dossiers comme celui-ci:

SELECT * FROM project.score WHERE project_id = 358 
AND crawled_at IN(SELECT crawled_at FROM project.score WHERE project_id = 358 
AND manual_selection = 1 GROUP BY crawled_at) 
ORDER BY crawled_at;  

SELECT * FROM project.score WHERE project_id = 358 
GROUP BY crawled_at HAVING manual_selection = 1; 

mais tout mon chemin toujours obtenir uniquement les lignes avec manual_selection = 1 . J'ai ent idée comment puis-je des lignes distinctes avec dupliquer "crawled_at" sur cas où manuel_selection = 1. Quelqu'un peut-il m'aider?

+0

Vous pouvez utiliser une combinaison de 'SELECT DISTINCT (champ)' et 'ORDER BY' – Manav

+0

mais j'ai besoin état si j'ai deux lignes avec la même date je n'en ai qu'une avec manual_selection = 1, je n'ai aucune idée comment je peux faire ça – LukeKov

+0

ça va être plus facile de le faire en utilisant un script comme 'php' plutôt que d'essayer de faire un mysql requête – Manav

Répondre

1

Essayez ceci:

select main.id, main.project_id, main.crawled_at, main.score, main.manual_selection 
from dcdashboard.moz_optimization_keywords as main 
left join dcdashboard.moz_optimization_keywords as non_manual_selection on non_manual_selection.crawled_at = main.crawled_at and non_manual_selection.manual_selection != 1 
group by main.crawled_at; 

Résultat avec jeu de données de la question:

+------+------------+---------------------+-------+------------------+ 
| id | project_id | crawled_at   | score | manual_selection | 
+------+------------+---------------------+-------+------------------+ 
| 807 |  360 | 2016-02-06 00:00:00 | 76 |    0 | 
| 1001 |  360 | 2016-02-20 00:00:00 | 76 |    0 | 
| 223 |  360 | 2016-11-28 00:00:00 | 76 |    0 | 
| 224 |  360 | 2016-12-05 00:00:00 | 76 |    0 | 
| 670 |  360 | 2016-12-19 00:00:00 | 76 |    0 | 
| 1164 |  360 | 2017-04-19 00:00:00 | 78 |    1 | 
| 1400 |  360 | 2017-09-13 00:00:00 | 96 |    1 | 
| 1548 |  360 | 2017-09-15 00:00:00 | 96 |    1 | 
+------+------------+---------------------+-------+------------------+ 
8 rows in set (0.00 sec) 
+0

ce travail agréable. Quand j'ai deux enregistrements avec la même date cette requête me renvoie l'un des deux mais avec manual_selection = 0 – LukeKov

+0

Pour moi il retourne un enregistrement avec manual_selection = 1 (dans le cas où il y a 2 enregistrements avec la même date). Au moins, avec votre ensemble de données, c'est comme ça. Vérifiez à nouveau, s'il vous plaît. –

+0

désolé mais quand je l'ai testé mon résultat n'est pas le même que votre – LukeKov