Abbiamo un database per i pazienti che mostra i dettagli delle loro diverse visite al nostro ufficio, come ad esempio il loro peso durante quella visita. Voglio generare un rapporto che restituisca la visita (una riga della tabella) in base alla differenza tra la data di quella visita e la prima visita del paziente che è il più grande valore possibile ma non superiore al numero X di giorni.MySQL - Selezionare la riga con la colonna + X> Colonna
Questo è molto chiaro, quindi mi permetta di provare un esempio. Diciamo che ho la seguente tabella chiamata patient_visits
:
visit_id | created | patient_id | weight
---------+---------------------+------------+-------
1 | 2006-08-08 09:00:05 | 10 | 180
2 | 2006-08-15 09:01:03 | 10 | 178
3 | 2006-08-22 09:05:43 | 10 | 177
4 | 2006-08-29 08:54:38 | 10 | 176
5 | 2006-09-05 08:57:41 | 10 | 174
6 | 2006-09-12 09:02:15 | 10 | 173
Nella mia domanda, se fossi voglia di eseguire questo rapporto per "30 giorni", vorrei restituire la riga in cui visit_id = 5
, perché è di 28 giorni in il futuro, e la prossima fila è di 35 giorni nel futuro, il che è troppo.
ho provato una varietà di cose, come ad esempio l'adesione al tavolo a se stesso, o la creazione di una sottoquery nella clausola WHERE
per cercare di restituire il valore massimo di created
dove è uguale o inferiore a created + 30 days
, ma io sembra essere in perdita a questo punto. Come ultima risorsa, posso semplicemente inserire tutti i dati in un array PHP e creare un po 'di logica, ma preferirei non farlo.
Il quadro più grande è questo: Il database ha circa 5.000 pazienti, ciascuno con un numero qualsiasi di visite ambulatoriali. Voglio compilare il rapporto per dirmi quale è stata la perdita media di attesa per tutti i pazienti combinati dalla prima visita a X giorni (cioè, X giorni dalla prima visita di ciascun paziente, non un periodo arbitrario di X-day). Spero che se riesco a risolvere il problema, sarò in grado di lavorare il resto.
Lasciatemi riformulare che: per ogni paziente_id si dovrebbe prendere la * prima visita * (chiamiamola * ancora *), quindi trovare un'altra visita * più lontana * dall'ancora ma non più di X giorni dall'ancora . Tutte le altre visite (cioè quelle più vicine all'ancora e quelle superiori a X giorni) dovrebbero essere scartate. Destra? –