api.moorage_view
Description
Moorage details web view
Table Definition
CREATE VIEW moorage_view AS (
WITH stay_details AS (
SELECT s.moorage_id,
s.arrived,
s.departed,
s.duration,
s.id AS stay_id,
first_value(s.id) OVER (PARTITION BY s.moorage_id ORDER BY s.arrived) AS first_seen_id,
first_value(s.id) OVER (PARTITION BY s.moorage_id ORDER BY s.departed DESC) AS last_seen_id
FROM api.stays s
WHERE (s.active = false)
), stay_summary AS (
SELECT stay_details.moorage_id,
min(stay_details.arrived) AS first_seen,
max(stay_details.departed) AS last_seen,
sum(stay_details.duration) AS total_duration,
count(*) AS stay_count,
max(stay_details.first_seen_id) AS first_seen_id,
max(stay_details.last_seen_id) AS last_seen_id
FROM stay_details
GROUP BY stay_details.moorage_id
), log_summary AS (
SELECT logs.moorage_id,
count(DISTINCT logs.id) AS log_count
FROM ( SELECT l_1._from_moorage_id AS moorage_id,
l_1.id
FROM api.logbook l_1
WHERE (l_1.active = false)
UNION ALL
SELECT l_1._to_moorage_id AS moorage_id,
l_1.id
FROM api.logbook l_1
WHERE (l_1.active = false)) logs
GROUP BY logs.moorage_id
)
SELECT m.id,
m.name,
sa.description AS default_stay,
sa.stay_code AS default_stay_id,
m.notes,
m.home_flag AS home,
m.geog,
m.latitude,
m.longitude,
COALESCE(l.log_count, (0)::bigint) AS logs_count,
COALESCE(ss.stay_count, (0)::bigint) AS stays_count,
COALESCE(ss.total_duration, 'PT0S'::interval) AS stays_sum_duration,
ss.first_seen AS stay_first_seen,
ss.last_seen AS stay_last_seen,
ss.first_seen_id AS stay_first_seen_id,
ss.last_seen_id AS stay_last_seen_id,
CASE
WHEN (jsonb_array_length((m.user_data -> 'images'::text)) > 0) THEN true
ELSE false
END AS has_images,
(m.user_data -> 'images'::text) AS images
FROM (((api.moorages m
JOIN api.stays_at sa ON ((m.stay_code = sa.stay_code)))
LEFT JOIN stay_summary ss ON ((m.id = ss.moorage_id)))
LEFT JOIN log_summary l ON ((m.id = l.moorage_id)))
WHERE (m.geog IS NOT NULL)
ORDER BY ss.total_duration DESC
)
Columns
| Name | Type | Default | Nullable |
|---|---|---|---|
| default_stay | text | true | |
| default_stay_id | integer | true | |
| geog | geography(Point,4326) | true | |
| has_images | boolean | true | |
| home | boolean | true | |
| id | integer | true | |
| images | jsonb | true | |
| latitude | double precision | true | |
| logs_count | bigint | true | |
| longitude | double precision | true | |
| name | text | true | |
| notes | text | true | |
| stay_first_seen | timestamp with time zone | true | |
| stay_first_seen_id | integer | true | |
| stay_last_seen | timestamp with time zone | true | |
| stay_last_seen_id | integer | true | |
| stays_count | bigint | true | |
| stays_sum_duration | interval | true |
Referenced Tables
| Name | Columns | Comment | Type |
|---|---|---|---|
| api.stays | 14 | Stores generated stays | BASE TABLE |
| api.logbook | 42 | Stores generated logbook | BASE TABLE |
| api.moorages | 13 | Stores generated moorages | BASE TABLE |
| api.stays_at | 2 | Stay Type | BASE TABLE |
| stay_summary | 0 | ||
| log_summary | 0 |
Relations
erDiagram
"api.moorage_view" {
text default_stay ""
integer default_stay_id ""
geography_Point_4326_ geog ""
boolean has_images ""
boolean home ""
integer id ""
jsonb images ""
double_precision latitude ""
bigint logs_count ""
double_precision longitude ""
text name ""
text notes ""
timestamp_with_time_zone stay_first_seen ""
integer stay_first_seen_id ""
timestamp_with_time_zone stay_last_seen ""
integer stay_last_seen_id ""
bigint stays_count ""
interval stays_sum_duration ""
}
Generated by tbls