2012-03-29 2 views
0

의료 환자가 정보 시스템을 관리한다고 가정 해 봅시다.SQL 수는 일일 쿼리가 예상대로 작동하지 않습니다.

  • stay 테이블 beginend 날짜 열
  • PHP 나에게 $first_day$last_day 한계

을 제공했습니다

나는 다음과 같은 최소한의 구조로 하루 환자 수를 얻으려면 다음 코드는 하루에 항목 수를 계산하고 하루에 체류하지 않기 때문에 원하는 내용이 아닙니다.

SELECT 
    DATE_FORMAT(`stay`.`begin`, '%Y-%m-%d') AS `date`, 
    COUNT(`stay`.`stay_id`) AS `total` 
FROM `stay` 
WHERE `stay`.`begin` <= '$first_day' 
    AND `stay`.`end` >= '$last_day' 
GROUP BY `date` 
ORDER BY `date` 

마지막으로 중요한 것은 전체 SQL 쿼리입니다.

각 날에 대해 하나의 SQL 쿼리를 작성하는 것은 완전히 사소한 것입니다.

임시 (날짜?) 테이블을 사용하는 것이 좋습니다.

답변

1

원하는 범위에서 모든 날짜의 임시 테이블을 사용하여 언급했듯이이를 처리하는 한 가지 방법이 있습니다. foo이라는 날짜 테이블을 만든 경우 모든 날짜는 $first_day$last_day (here 참조) 사이입니다.

는 그런 다음 같은 쿼리 작성할 수 있습니다

SELECT f.date, count(s.stay_id) 
FROM foo f 
JOIN stay s ON s.begin <= f.date AND s.end >= date 
GROUP BY f.date 
ORDER BY f.date 
+0

좋아, 지금 바보 같아. 나는 (a) 쿼리를 찾았어야 했어. (b) 당신이 링크 한 스택 스레드. 어쨌든, 고마워. –

+0

한가지 더, 내 datetimes를 필요한 날짜로 캐스팅하고 있습니까? 나는 그렇게 생각하지 않는다. –

+0

선택 또는 테이블에 있습니까? 또한 저장 프로 시저를 원하지 않으면 2100 년까지 모든 날짜가 포함 된 달력 표를 만들고 시작/끝을 사용하여 가입 할 수 있습니다. – GavinCattell

관련 문제