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;