I am using PostgreSQL version 8.1. I have a table of dates and tasks. The tasks have start times and end times in the table. The query below does not work as expected.
SELECT sites.abbrev,
(SELECT count(*)
FROM (
SELECT DISTINCT measurements.task
FROM measurements
JOIN tasks ON tasks.id = measurements.task
WHERE measurements.ztime >= '2016-10-10'
AND measurements.ztime <= '2016-10-15'
AND tasks.site = sites.id
) ALIAS
) AS num_tasks,
count(*) AS total_time
FROM sites
JOIN tasks ON tasks.site = sites.id
JOIN measurements
ON (measurements.task = tasks.id
AND measurements.ztime >= '2016-10-10'
AND measurements.ztime <= '2016-10-15')
WHERE sites.abbrev = 'AA-10'
GROUP BY sites.id,
sites.abbrev,
measurements.ztime::date
ORDER BY measurements.ztime::date;
The results are shown below:
abbrev | num_tasks | total_time
--------+-----------+------------
AA-10 | 62 | 36
AA-10 | 62 | 5
AA-10 | 62 | 58
AA-10 | 62 | 28
AA-10 | 62 | 17
(5 rows)
Each row corresponds to one 24 hour period (Ex. 2016-10-10 to 2016-10-15). The problem is that I need num_tasks
to show me the results for each 24 hour period, not the total number as shown.
PostgreSQL version 8.1 does not allow for dates to be used with generate_series
and there are no windowing functions available either.
How can I modify my query so I can achieve the desired results?
ztime
aDATE
? It would be best if you added theCREATE TABLE
statements in the question,num_tasks
have to count all tasks, even those that do not belong to the site with'AA-10'
?