View Full Version : [PostgreSQL] aiuto per query
ciao a tutti, ho una tabella tab di righe fatte così:
ord(int) | item(string) | data(date)
dove ord è Primary Key ed è progressivo per riga; i campi (a parte ovviente ord) possono essere vuoti.
A me seve una query che mi dia le riga tra 2 date, e ho fatto:
SELECT * FROM tab WHERE data BETWEEN 'data1' AND 'data2'
che però nn mi restituisce le righe dove il campo data è vuoto!
Si può ovviare?
grazie!!
che però nn mi restituisce le righe dove il campo data è vuoto!
Si può ovviare?Basta che la condizione che hai già messo sia in OR con un'altra condizione che dica "prendi quelli senza data".
Se non c'è una data, suppongo che sia NULL, quindi credo che si possa aggiungere: OR data IS NULL
Se non c'è una data, suppongo che sia NULL, quindi credo che si possa aggiungere: OR data IS NULL
si, è NULL, ma è un po' più complesso... mi spiego: mettiamo che sia
data1 < data2
a data1 corrisponde ord1, a data2, ord2 (quindi ord1 < ord2) la query dovrebbe restituire le righe tra ord1 e ord2, comprese quelle dove data = NULL.
scusa se ho spiegato male.
si, è NULL, ma è un po' più complesso... mi spiego: mettiamo che sia
data1 < data2Innanzitutto suppongo che questi data1 e data2 siano dei valori "costanti" che metti nella query, giusto?
si, è NULL, ma è un po' più complesso... mi spiego: a data1 corrisponde ord1, a data2, ord2 (quindi ord1 < ord2) la query dovrebbe restituire le righe tra ord1 e ord2, comprese quelle dove data = NULL.Questo che stai dicendo è un caso particolare.
La query che hai fatto dice solo di prendere tutte le righe in cui il campo data è compreso tra due valori.
Che poi tutte le righe che hanno data1 <= data <= data2 siano anche, guarda caso, tra un certo ord1 e ord2 .... è un caso particolare.
Innanzitutto suppongo che questi data1 e data2 siano dei valori "costanti" che metti nella query, giusto?
cosa intendi con 'valori costanti'? nel caso della mia applicazione le date vengono date in input...
quello che mi serve è una cosa che prende le 2 date, data1 e data2, faccia la query:
SELECT * FROM tab WHERE data BETWEEN 'data1' AND 'data2'
dopodichè prenda il più piccolo ed il più grande dei valori ord restituiti e faccia una seconda query:
SELECT * FROM tab WHERE ord BETWEEN 'ord1' AND 'ord2'
Ma una cosa così si riesce a fare solo con SQL?
cosa intendi con 'valori costanti'? nel caso della mia applicazione le date vengono date in input...Sì ma suppongo che nella query saranno dei valori del tipo '20070227'. Che poi questi valori siano presi in input, cambia poco.
quello che mi serve è una cosa che prende le 2 date, data1 e data2, faccia la query:
SELECT * FROM tab WHERE data BETWEEN 'data1' AND 'data2'
dopodichè prenda il più piccolo ed il più grande dei valori ord restituiti e faccia una seconda query:
SELECT * FROM tab WHERE ord BETWEEN 'ord1' AND 'ord2'
Ma una cosa così si riesce a fare solo con SQL?Sui database sono una schiappa, percui la butto lì:
SELECT * FROM tab WHERE ord BETWEEN
(SELECT MIN(ord) FROM tab WHERE data BETWEEN 'data1' AND 'data2')
AND
(SELECT MAX(ord) FROM tab WHERE data BETWEEN 'data1' AND 'data2')
Non mi assumo responsabilità. :D
Non mi assumo responsabilità.
beh, è una app. didattica (per me), quindi non ti preoccupare... :)
provo e vedo.
per ora ti ringrazio.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.