나는 주차 계량기의 실시간 데이터를 얻었으며 주차 계좌의 현재 상태를 과거 데이터와 비교하고자합니다. 내 데이터에는 주차 티켓이 포함되어 있습니다. 주차 티켓은 구입 당시의 datetime_start 및 더 이상 유용하지 않은 datetime_stop을 포함합니다.주차 계좌 거래 내역 데이터와 비교
이 SQL은 실제로 작동하지만 매우 느립니다. 나는 어떻게 든 최적화 할 수있는 몇 번이나 다른 것들에 대한 모든 데이터를 통해 실행 같아요
(SELECT "parking_meter_id", SUM(CASE WHEN Now() BETWEEN "datetime_start" AND "datetime_stop" THEN 1 ELSE 0 END) < (
SUM(CASE WHEN Now() - interval '1 week' BETWEEN "datetime_start" AND "datetime_stop" THEN 1 ELSE 0 END) +
SUM(CASE WHEN Now() - interval '2 week' BETWEEN "datetime_start" AND "datetime_stop" THEN 1 ELSE 0 END) +
SUM(CASE WHEN Now() - interval '3 week' BETWEEN "datetime_start" AND "datetime_stop" THEN 1 ELSE 0 END) +
SUM(CASE WHEN Now() - interval '4 week' BETWEEN "datetime_start" AND "datetime_stop" THEN 1 ELSE 0 END) +
SUM(CASE WHEN Now() - interval '5 week' BETWEEN "datetime_start" AND "datetime_stop" THEN 1 ELSE 0 END) +
SUM(CASE WHEN Now() - interval '6 week' BETWEEN "datetime_start" AND "datetime_stop" THEN 1 ELSE 0 END) +
SUM(CASE WHEN Now() - interval '7 week' BETWEEN "datetime_start" AND "datetime_stop" THEN 1 ELSE 0 END) +
SUM(CASE WHEN Now() - interval '8 week' BETWEEN "datetime_start" AND "datetime_stop" THEN 1 ELSE 0 END)
/8) AS available
FROM "parking_meter_transactions"
WHERE
Now() BETWEEN "datetime_start" AND "datetime_stop" OR
Now() - interval '1 week' BETWEEN "datetime_start" AND "datetime_stop" OR
Now() - interval '2 week' BETWEEN "datetime_start" AND "datetime_stop" OR
Now() - interval '3 week' BETWEEN "datetime_start" AND "datetime_stop" OR
Now() - interval '4 week' BETWEEN "datetime_start" AND "datetime_stop" OR
Now() - interval '5 week' BETWEEN "datetime_start" AND "datetime_stop" OR
Now() - interval '6 week' BETWEEN "datetime_start" AND "datetime_stop" OR
Now() - interval '7 week' BETWEEN "datetime_start" AND "datetime_stop" OR
Now() - interval '8 week' BETWEEN "datetime_start" AND "datetime_stop"
GROUP BY "parking_meter_id") AS transactions
기본적인 아이디어는 지금 (현재의 "법적"입니다 티켓의 양)을 계산하고 비교하는 것입니다 같은 시간대에 지난 8 주 동안의 금액으로 계산됩니다. 이것은 가능한 주차 공간이 있어야하는지에 대한 통계적 아이디어를 줄 수 있습니다.
WHERE 절이 8 대신 16 주를 표시하는 이유는 무엇입니까? –
datetime_start 및 datetime_stop은 모두 큰 따옴표 (대)로 묶어야합니다. 원래의 질문을 편집하여 데이터 샘플을 보여주는 것이 더 좋을 수도 있습니다. 그리고 공간 정렬과 탭 정렬을 통해 가독성을 높이십시오. – DRapp
@DRapp : 열 이름과 같은 식별자는 큰 따옴표 또는 따옴표를 사용하지 않습니다. 그들은 작은 따옴표를 사용하지 않습니다. –