1 | --Најново членство по член
|
---|
2 | SELECT c.clenid, c.ime, c.prezime, p.ime AS paket, m.start_datum
|
---|
3 | FROM clenovi c
|
---|
4 | JOIN LATERAL (
|
---|
5 | SELECT m.*
|
---|
6 | FROM clenstvo m
|
---|
7 | WHERE m.clenid = c.clenid
|
---|
8 | ORDER BY m.start_datum DESC
|
---|
9 | LIMIT 1
|
---|
10 | ) m ON true
|
---|
11 | JOIN paketi p ON p.paketid = m.paketid
|
---|
12 | WHERE m.start_datum <= current_date;
|
---|
13 | --Активни членства на даден ден со времетраење
|
---|
14 |
|
---|
15 | --Топ пакети по број на активни членства денес
|
---|
16 | WITH period AS (
|
---|
17 | SELECT m.clenid, m.paketid, m.start_datum,
|
---|
18 | (m.start_datum + (tv.vremetraenjedenovi || ' days')::interval)::date AS end_datum
|
---|
19 | FROM clenstvo m
|
---|
20 | JOIN tip_vremetranje tv ON tv.vremetraenjeid = m.vremetraenjeid
|
---|
21 | )
|
---|
22 | SELECT c.clenid, c.ime, c.prezime, p.ime AS paket, period.start_datum, period.end_datum
|
---|
23 | FROM period
|
---|
24 | JOIN clenovi c ON c.clenid = period.clenid
|
---|
25 | JOIN paketi p ON p.paketid = period.paketid
|
---|
26 | WHERE period.start_datum <= current_date
|
---|
27 | AND current_date < period.end_datum;
|
---|
28 |
|
---|
29 |
|
---|
30 | WITH active AS (
|
---|
31 | SELECT m.paketid
|
---|
32 | FROM clenstvo m
|
---|
33 | JOIN tip_vremetranje tv ON tv.vremetraenjeid = m.vremetraenjeid
|
---|
34 | WHERE m.start_datum <= current_date
|
---|
35 | AND current_date < (m.start_datum + (tv.vremetraenjedenovi || ' days')::interval)::date
|
---|
36 | )
|
---|
37 | SELECT p.ime AS paket, COUNT(*) AS broj_aktivni
|
---|
38 | FROM active a
|
---|
39 | JOIN paketi p ON p.paketid = a.paketid
|
---|
40 | GROUP BY p.ime
|
---|
41 | ORDER BY broj_aktivni DESC;
|
---|
42 |
|
---|
43 | --Членови без посета во последни 30 дена
|
---|
44 | SELECT c.clenid, c.ime, c.prezime
|
---|
45 | FROM clenovi c
|
---|
46 | LEFT JOIN LATERAL (
|
---|
47 | SELECT 1
|
---|
48 | FROM poseti po
|
---|
49 | WHERE po.clenid = c.clenid
|
---|
50 | AND po.datum >= current_date - INTERVAL '30 days'
|
---|
51 | LIMIT 1
|
---|
52 | ) x ON true
|
---|
53 | WHERE x IS NULL;
|
---|
54 | --Последна посета по локација и член
|
---|
55 | SELECT c.clenid, c.ime, l.ime AS lokacija, max(po.datum) AS last_visit
|
---|
56 | FROM poseti po
|
---|
57 | JOIN clenovi c ON c.clenid = po.clenid
|
---|
58 | JOIN lokacii l ON l.lokacijaid = po.lokacijaid
|
---|
59 | GROUP BY c.clenid, c.ime, l.ime
|
---|
60 | ORDER BY last_visit DESC; |
---|