J'ai ce tableau:
name dob Peter 1914-07-23 Sandra 2014-07-23 Sam 1911-01-01 Jane 2011-01-01
Comment puis-je récupérer une liste de personnes ayant le même dob et exactement 100 ans de plus ou moins?
Lignes attendues:
name dob Peter 1914-07-23 John 1990-03-25 Sandra 2014-07-23 Sam 1911-01-01 Jane 2011-01-01 Tom 2017-01-01
La différence entre dob devrait être de 100 ans
3 Réponses :
Si la date de naissance est un type de données de date, suggère d'utiliser TRUNC
et ADD_MONTHS
.
SELECT a.name FROM my_table a, my_table b WHERE TRUNC(a.dob) = TRUNC(ADD_MONTHS(b.dob, 100*12))
Une autre possibilité est de convertir la date de naissance en seulement le mois et le jour, puis de faire un groupe par dessus pour trouver tout ce qui a plus de 1. En d'autres termes:
select name, dob from mytable where to_char(dob, 'MM-DD') in ( select to_char(dob, 'MM-DD') as birthday from mytable group by to_char(dob, 'MM-DD') having count(*) > 1 )
Cela devrait vous donner toutes les dupes. Ensuite, vous pouvez demander à tout le monde avec l'un de ces anniversaires:
select to_char(dob, 'MM-DD') as birthday from mytable group by to_char(dob, 'MM-DD') having count(*) > 1
Ce n'est peut-être pas le plus rapide, mais cela me semble le plus intuitif.
Edit: En relisant la question et les réponses, je ne suis pas convaincu d'avoir bien compris. Mais je pense qu'aucune de ces réponses n'est exactement ce que vous vouliez, alors peut-être devrez-vous les combiner toutes pour obtenir ce dont vous avez besoin.
Essayez ce qui suit:
sélectionnez * parmi les personnes où MONTH (dob) = 07 et Day (dob) = 23;