2017-10-18 5 views
-1

주어진 (처방전) 시작일과 종료일 사이의 모든 날짜를 나열해야합니다 (훨씬 더 큰 쿼리의 일부로).MySQL - 세션 변수를 사용하여 주어진 두 날짜 사이의 모든 날짜를 나열하십시오.

Table name: patientprescription 
Start date field: prescriptionstartdate 
End date field: prescriptionenddate 

세션 변수를 사용하려고합니다. 하지만 변수에 초기 값을 설정하는 것이 어렵다는 것을 알게되었습니다. 첫 번째 실행은 아무런 결과도 가져 오지 않지만 후속 실행은 정확한 결과를 제공합니다 (첫 번째 실행은 변수를 설정하기 때문에). 나의 필요를 단순화하기 위해

, 여기에 내 질문의 요점입니다 :

SELECT 
    @gg := DATE_ADD (@gg, INTERVAL 1 DAY) AS rxDate 
FROM patientprescription AS rx 
    JOIN (SELECT @gg := @hh FROM t1) AS v1 ON @hh := rx.prescriptionstartdate 
WHERE 
    rx.id = 8 
    AND @gg <= rx.prescriptionenddate; 

T1 몇 가지 기록을 일부 테이블입니다.

은 실행 후 다시 변수를 재설정하려면 : 나는 변수로이를 얻을 수 있었다

SELECT @gg := NULL, @hh := NULL; 
+0

가능한 복제 [mysql을 선택 쿼리에서 두 날짜 사이의 날짜의 목록을 얻는 방법 (https://stackoverflow.com/questions/9295616/how-to-get-list-of-dates-between -two-dates-in-mysql-select-query) – GurV

+0

링크를 가리켜 주셔서 감사합니다. 나는 그것을보고있다. 그 외에도 변수를 사용하여 위의 쿼리와 동일한 결과를 얻을 수 있습니까? –

+0

아직도 고생하고 있습니까? https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query를 참조하십시오. – Strawberry

답변

0

.

SELECT 
    @gg := DATE(DATE_ADD (rx.prescriptionstartdate, INTERVAL @hh DAY)) rxDateNext, 
    @hh := @hh + 1 AS adderStmt 
FROM patientprescription rx 
    JOIN (SELECT @hh := 0 FROM t1) AS v1 
WHERE 
    rx.id = 8 
    AND @hh <= DATEDIFF(rx.prescriptionenddate, rx.prescriptionstartdate);