summaryrefslogtreecommitdiff
path: root/p2pvr/lib/sql/Schedules_GetCandidates.sql
diff options
context:
space:
mode:
Diffstat (limited to 'p2pvr/lib/sql/Schedules_GetCandidates.sql')
-rw-r--r--p2pvr/lib/sql/Schedules_GetCandidates.sql43
1 files changed, 24 insertions, 19 deletions
diff --git a/p2pvr/lib/sql/Schedules_GetCandidates.sql b/p2pvr/lib/sql/Schedules_GetCandidates.sql
index aa6ec0f..f7ad997 100644
--- a/p2pvr/lib/sql/Schedules_GetCandidates.sql
+++ b/p2pvr/lib/sql/Schedules_GetCandidates.sql
@@ -1,20 +1,25 @@
-select (e.title, e.subtitle, e.description)::text what, e.serviceid, e.eventid, sv.transportstreamid,
- e.starttime - max(s.early), e.stoptime - interval '1 second' + max(s.late),
- max(s.priority)
-from services sv, events e, schedules s
-where (s.serviceid is null or s.serviceid = e.serviceid)
-and (s.title is null or lower(s.title) = lower(e.title))
-and (s.eventid is null or s.eventid = e.eventid)
-and (s.search is null or event_tsvector(e) @@ plainto_tsquery(s.search))
-and sv.serviceid = e.serviceid
-and e.starttime > now()
-and not exists (
- select 1
- from recorded r
- where lower(e.title) = lower(r.title)
- and coalesce(lower(e.subtitle), '') = coalesce(lower(r.subtitle), '')
- and ts_rank(to_tsvector(e.description), plainto_tsquery(r.description)) +
- ts_rank(to_tsvector(r.description), plainto_tsquery(e.description)) > 1)
-group by e.serviceid, e.eventid, sv.serviceid
-order by max(s.priority) desc, e.title, e.subtitle, e.description, sv.transportstreamid, e.starttime
+select what, serviceid, eventid, transportstreamid,
+ starttime - early starttime, stoptime + late stoptime,
+ priority, scheduleid
+from (
+ select (e.title, e.subtitle, e.description)::text what, e.serviceid, e.eventid, sv.transportstreamid,
+ e.starttime, e.stoptime - interval '1 second' stoptime,
+ s.early, s.late, s.scheduleid, s.priority,
+ rank() over(partition by e.serviceid, e.eventid, sv.serviceid order by s.priority desc, s.scheduleid) schedulerank
+ from services sv, events e, schedules s
+ where (s.serviceid is null or s.serviceid = e.serviceid)
+ and (s.title is null or lower(s.title) = lower(e.title))
+ and (s.eventid is null or s.eventid = e.eventid)
+ and (s.search is null or event_tsvector(e) @@ plainto_tsquery(s.search))
+ and sv.serviceid = e.serviceid
+ and e.starttime > now()
+ and not exists (
+ select 1
+ from recorded r
+ where lower(e.title) = lower(r.title)
+ and coalesce(lower(e.subtitle), '') = coalesce(lower(r.subtitle), '')
+ and ts_rank(to_tsvector(e.description), plainto_tsquery(r.description)) +
+ ts_rank(to_tsvector(r.description), plainto_tsquery(e.description)) > 1)) e
+where e.schedulerank = 1
+order by e.priority desc, e.what, e.transportstreamid, e.starttime