1
votes

SQL (les personnes partagent le même anniversaire mais elles ont exactement 100 ans de plus ou moins)

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


0 commentaires

3 Réponses :


1
votes

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))


0 commentaires

0
votes

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.


0 commentaires

0
votes

Essayez ce qui suit:

sélectionnez * parmi les personnes où MONTH (dob) = 07 et Day (dob) = 23;


0 commentaires