Need lihtsustavad päringute tegemist.
Tabelis Kasutus_1 on kasutusel, mille lõpu aeg pole teada, lõpu aja väli tühi (seal väljas on NULL).
CREATE TABLE Kasutus_1 (kasutus_1_id SERIAL,ruumi_nr INTEGER NOT NULL,alguse_aeg TIMESTAMP NOT NULL,lopu_aeg TIMESTAMP,CONSTRAINT pk_kasutus_1 PRIMARY KEY (kasutus_1_id),CONSTRAINT ak_kasutus_1 UNIQUE (ruumi_nr, alguse_aeg));INSERT INTO Kasutus_1 (ruumi_nr, alguse_aeg) VALUES (1, '2022-10-04 12:00'), (2, '2022-10-04 12:00');INSERT INTO Kasutus_1 (ruumi_nr, alguse_aeg, lopu_aeg) VALUES (1, '2021-11-04 12:00', '2021-11-04 14:00'), (3, '2021-11-04 12:00', '2028-11-04 12:00');Tabelis Kasutus_2 on kasutusel, mille lõpu aeg pole teada, lõpu aja väljas väärtus 'infinity'.
CREATE TABLE Kasutus_2 (kasutus_2_id SERIAL,ruumi_nr INTEGER NOT NULL,alguse_aeg TIMESTAMP NOT NULL,lopu_aeg TIMESTAMP NOT NULL DEFAULT 'infinity',CONSTRAINT pk_kasutus_2 PRIMARY KEY (kasutus_2_id),CONSTRAINT ak_kasutus_2 UNIQUE (ruumi_nr, alguse_aeg));INSERT INTO Kasutus_2 (ruumi_nr, alguse_aeg) VALUES (1, '2022-10-04 12:00'), (2, '2022-10-04 12:00');INSERT INTO Kasutus_2 (ruumi_nr, alguse_aeg, lopu_aeg) VALUES (1, '2021-11-04 12:00', '2021-11-04 14:00'), (3, '2021-11-04 12:00', '2028-11-04 12:00');Leia hetkel toimuvad kasutused.
Päring juhul kui lõpu aeg võib olla NULL.
SELECT *FROM Kasutus_1WHERE (LOCALTIMESTAMP BETWEEN alguse_aeg AND lopu_aeg)OR (alguse_aeg<=LOCALTIMESTAMP AND lopu_aeg IS NULL);Päring juhul kui teadmata lõpu aega tähistab spetsiaalväärtus 'infinity'.
SELECT *FROM Kasutus_2WHERE (LOCALTIMESTAMP BETWEEN alguse_aeg AND lopu_aeg);