Le titre réécrit est : Récupération des enregistrements par incréments de 30 jours
P粉633309801
P粉633309801 2024-03-29 22:31:21
0
2
380

J'ai la requête suivante pour obtenir les rendez-vous qui doivent être rappelés une fois par mois (s'ils ne sont pas encore terminés). Je souhaite obtenir les enregistrements des 30, 60, 90, 120, etc. à partir de la date actuelle.

SELECT
    a.*
FROM
    appointments a
WHERE
    DATEDIFF(CURDATE(), a.appointment_date) % 30 = 0

Existe-t-il un autre moyen d'y parvenir sans utiliser DATEDIFF ? Je souhaite améliorer les performances de cette requête.

P粉633309801
P粉633309801

répondre à tous(2)
P粉860370921

Vous pouvez utiliser la requête suivante pour comparer la date d'un rendez-vous avec la date d'aujourd'hui.
Nous testons également si c'est le dernier jour du mois pour prendre rendez-vous en fin de mois. Par exemple, si nous sommes le 28 février (qui n'est pas une année bissextile), nous accepterons les dates de ce mois >= 28, qui sont le 29, le 30 et le 31, qui autrement seraient manquées.
Cette méthode souffre du même problème que votre système actuel, à savoir que les rendez-vous du week-end seront manqués.

select a.*
from appointements a,
(select 
  day(now()) today,
  case when day(now())= last_day(now()) then day(now()) else 99 end lastDay
) days
where d = today or d >= lastDay;
P粉186904731

D’accord, mettons de côté les dates et les différences de dates pour l’instant. Du point de vue de cette question, la personne essaie de retrouver tous les rendez-vous passés et pas nécessairement un autre rendez-vous dans le futur. Comme un rendez-vous de suivi avec le médecin pour « revenir dans un mois et voir si les choses ont changé ». Cela m'a fait penser qu'il pourrait y avoir une pièce d'identité du patient dans le formulaire de rendez-vous. Cela pourrait donc déplacer la question vers une rétrospective d'il y a 30, 60 ou 90 jours pour voir s'il y a des rendez-vous prévus pour le futur. Les patients n’ont pas besoin d’un rappel téléphonique pour se présenter au cabinet s’ils ont déjà un rendez-vous.

Cela étant dit, je commencerais différemment et prendrais tous les patients qui ont eu un rendez-vous au cours des 90 derniers jours et verrais s'ils ont (ou n'ont pas) eu un rendez-vous de suivi sur le planning de suivi - en remontant. De cette façon, le personnel du cabinet peut contacter ledit patient pour qu'il soit inscrit sur le calendrier.

Commencez par obtenir le volume maximum de rendez-vous pour un patient donné au cours des 90 derniers jours. Si quelqu'un a pris rendez-vous il y a 90 jours et a eu un suivi il y a 59 jours, il se peut qu'il ne se soucie que du rendez-vous le plus récent pour s'assurer qu'il y a un suivi.

select
      a1.patient_id,
      max( a1.appointment_date ) MostRecentApnt
   from 
      appointments a1
   WHERE
      a1.appointment_date > date_sub( a1.appointment_date, interval 90 day )
   group by
      a1.patient_id

Maintenant, à partir de cette liste fixe et de cette date de début, tout ce qui nous importe, c'est combien de jours jusqu'à ce que la date actuelle soit la dernière date. Est-ce le jour X ? Utilisez simplement dateiff et triez. Vous pouvez voir visuellement combien de jours il y a. En essayant de les diviser en tranches de 30, 60 ou 90 jours, le simple fait de savoir combien de jours se sont écoulés depuis le dernier rendez-vous pourrait être aussi simple que de trier par ordre décroissant, en appelant d'abord les rendez-vous les plus anciens, plutôt que ceux qui viennent de se produire. Il est même possible de couper la liste d'appels après 20 jours et de ne toujours pas avoir de rendez-vous et d'être proche des 30 jours prévus.

SELECT
      p.LastName,
      p.FirstName,
      p.Phone,
      Last90.Patient_ID,
      Last90.MostRecentApnt,
      DATEDIFF(CURDATE(), Last90.appointment_date)  LastAppointmentDays
   FROM
      ( select
              a1.patient_id,
              max( a1.appointment_date ) MostRecentApnt
           from 
              appointments a1
           WHERE
              a1.appointment_date > date_sub( a1.appointment_date, interval 90 day )
           group by
              a1.patient_id ) Last90
      -- Guessing you might want patient data to do phone calling
         JOIN Patients p
            on Last90.Patient_id = p.patient_id
   order by
      Last90.MostRecentApnt DESC,
      p.LastName,
      p.FirstName

Parfois, le simple fait de répondre à une question directe ne sert pas le bon objectif. J'espère pouvoir être plus précis sur les besoins en matière de résultat final souhaité. Encore une fois, ce qui précède signifie joindre le formulaire patient pour un appel de suivi afin de prendre rendez-vous.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal