Maison  >  Questions et réponses  >  le corps du texte

Le titre réécrit est : Récupération des enregistrements par incréments de 30 jours

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粉633309801P粉633309801203 Il y a quelques jours332

répondre à tous(2)je répondrai

  • P粉860370921

    P粉8603709212024-03-30 15:08:42

    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;

    répondre
    0
  • P粉186904731

    P粉1869047312024-03-30 11:36:18

    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.

    répondre
    0
  • Annulerrépondre