This repository has been archived by the owner on Jun 17, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
useful_stuff.sql
167 lines (104 loc) · 4.17 KB
/
useful_stuff.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
select * from sosta;
create view libero_ora as
(
select *
from molo
where occupato = false);
-- robba2
select id, loa,larghezza,pescaggio
from imbarcazione
where id NOT IN (SELECT imbarcazione from sosta)
order by loa,larghezza,pescaggio
limit 1;
-- robba
WITH barca as (select id, loa,larghezza,pescaggio
from imbarcazione
where id NOT IN (SELECT imbarcazione from sosta)
order by loa,larghezza,pescaggio
limit 1)
select libero_ora.*
from libero_ora, barca
where lunghezza > (select loa from barca)
and libero_ora.larghezza > (select larghezza from barca)
and profonditaminima > (select pescaggio from barca)
and libero_ora.id not in (SELECT molo from sosta)
order by lunghezza,libero_ora.larghezza,profonditaminima;
with o as(select molo from molo_occupato)
UPDATE molo
SET occupato = true
WHERE molo.id in (select molo from o) ;
select * from imbarcazione;
select * from libero_ora;
---Cose per sistemare il db
select from sosta,imbarcazione where imbarcazione.id = sosta.imbarcazione;
with o as(select molo from molo_occupato)
UPDATE molo
SET occupato = true
WHERE molo.id in (select molo from o) ;
--Trovare un cliente che non ha fatto soste
with s as (select imbarcazione from sosta)
select * from imbarcazione where id in (select s.imbarcazione from s);
with i as (select cliente from imbarcazione)
select * from cliente where persona not in (select i.cliente from i);
with c as (select max(id) as max from cliente)
SELECT setval('cliente_id_seq', (select c.max from c), true);
select from sosta,imbarcazione where imbarcazione.id = sosta.imbarcazione;
with o as(select molo from molo_occupato_rid)
UPDATE molo
SET occupato = true
WHERE molo.id in (select molo from o) ;
--Trovare un cliente che non ha fatto soste
with s as (select imbarcazione from sosta)
select * from imbarcazione where id in (select s.imbarcazione from s);
with i as (select cliente from imbarcazione)
select * from cliente
join persona p on p.cf = cliente.persona
where persona not in (select i.cliente from i) ;
select * from persona
where cf not in (select persona from cliente union distinct select persona from addetto);
select persona from cliente union distinct select persona from addetto;
with c as (select max(id) as max from cliente)
SELECT setval('cliente_id_seq', (select c.max from c), true);
select * from libero_adesso;
with a as (SELECT molo from sosta union distinct select id as molo from Molo
WHERE molo NOT IN (select molo from molo_occupato))
select * from a,sosta where a.molo = sosta.molo;
with a as (SELECT id from molo where occupato=false)
select * from a left join sosta on a.id;
select * from libero_adesso_rid;
select id as molo , libero_da,libero_fino_a, molo.occupato as occupato_ora from molo left join libero_adesso_rid on libero_adesso_rid.molo = molo.id;
select * from moli_liberi;
with o as(select molo from molo_occupato_rid)
UPDATE molo
SET occupato = true
WHERE molo.id in (select molo from o) ;
-- Views utili
-- Le views con *_rid sono views che utilizzano solamente la ridondanza per calcolare le risposte
create view molo_occupato_rid as
select molo, arrivo, partenza
from sosta
where partenza > now() AT TIME ZONE 'Europe/Rome'
and arrivo < now() AT TIME ZONE 'Europe/Rome';
create view molo_occupato as
select id from Molo
where occupato = true;
create view molo_libero_fino_a_rid as
SELECT molo, arrivo as libero_fino_a
FROM sosta
WHERE molo NOT IN (select molo from molo_occupato_rid)
and arrivo > now() AT TIME ZONE 'Europe/Rome';
create view molo_libero_da_rid as
SELECT molo, arrivo as libero_da
FROM sosta
WHERE molo NOT IN (select molo from molo_occupato_rid)
and partenza < now() AT TIME ZONE 'Europe/Rome';
create view libero_adesso_rid as
select coalesce(molo_libero_da_rid.molo, mlfa.molo) as molo,
max(molo_libero_da_rid.libero_da) as libero_da,
min(mlfa.libero_fino_a) as libero_fino_a
from molo_libero_da_rid
full join molo_libero_fino_a_rid mlfa on molo_libero_da_rid.molo = mlfa.molo
group by (molo_libero_da_rid.molo, mlfa.molo);
create view moli_liberi as
select id as molo , libero_da,libero_fino_a, molo.occupato as occupato_ora
from molo left join libero_adesso_rid on libero_adesso_rid.molo = molo.id;