Newsgroup: it.comp.lang.delphi
Titolo: Query in Interbase

Come faccio ad estrarre da una tabella interbase tutti i dati divisi per
anno, dove l'anno è presente in una tabella di tipo Date.
Esiste qualche comando per decodificare la data ?
CIao

 CIao
Ciao :)
Andrea

> Beh, esiste una DecodeDate, guarda quello :)))
In interbase?
Bye
AS

 Esiste qualche comando per decodificare la data ?
SELECT pippo FROM tabella 
WHERE EXTRACT(YEAR FROM tuocampodata) = 2000;
Questo e' SQL92, ma non so se IB lo supporta, non l'ho provato.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 AS
Andrea


funziona, funziona...


wrote:

e come direbbe Di Pietro, che ci azzecca con SQL?
-- 
Ore 18.30: premo invio.

 ha scritto nel messaggio
news:3CE2534...@fastwebnet.it...


Non sono sicuro di aver capito bene il tuo problema.
Ho provato ad eseguire una query sul mio db cercando di emulare il tuo 
problema, con:
SELECT  data, nome FROM tabella
WHERE EXTRACT(YEAR FROM data)  > 1888
AND EXTRACT(YEAR FROM  data) < 1920
ORDER BY data, nome
;
mi restituisce qualcosa che forse somiglia a quello che cerchi.
Michele Giordano

 Grazie
Prego.
Ciao, Antò.

 ha scritto nel messaggio
news:Xns920FA40284024an...@195.31.190.132...


 e come direbbe Di Pietro, che ci azzecca con SQL?
Se leggi il mio primo post, ti accorgerai che ho scritto di non aver capito
cosa intendesse lui.
Io ho interpretato che gli servisse IN DELPHI, un modo per decodificare la
data, mentre evidentemente a lui serviva un'altra cosa :)
Andrea

 GROUP BY DATAISCRIZIONE
Se lo metti in una group by non va indicato anche nella select?
Inoltre, cosi' raggruppa per data.
Quindi, se per un anno voi sono 100 date diverse avra' 100 records.
Pare che lui ne voglia uno x anno, se non ho capito male....
Magari cosi' va:
SELECT COUNT(ID), EXTRACT (YEAR FROM DATAISCRIZIONE) as anno
FROM ISCRITTI
WHERE EXTRACT (YEAR FROM DATAISCRIZIONE)= '2000'
GROUP BY anno
Bye
AS


 numero totale di iscritti in quel anno, a causa del Group By che serve a me.
Se ti serve il numero di iscritti in quell'anno, allora devi usare:
SELECT COUNT(ID) FROM ISCRITTI
WHERE EXTRACT (YEAR FROM DATAISCRIZIONE)= '2000'


 Io ho interpretato che gli servisse IN DELPHI
...e dire che il thread si chiama "Query in Interbase" ;)


 ...e dire che il thread si chiama "Query in Interbase" ;)
Tecnicamente Interbase viene distribuito come parte di Delphi, e siamo in un
ng su DELPHI :)))
Forse la mia interpretazione errata è stata data dal sonno che ancora mi
attanagliava quando ho scritto, ma sicuramente la chiarezza non era il pezzo
forte del primo messaggio :)
Andrea

Così sarebbe giusto ma purtroppo non funziona. Mi sa che devo andare via
codice. :(
Grazie lo stesso


 forte del primo messaggio :)
Si stava scherzando e comunque, onestamente, a me il primo
messaggio e' apparso piuttosto chiaro ;)


Cosě sarebbe giusto ma purtroppo non funziona. Mi sa che devo andare via

Cosi' dovrebbe funzionare:
select Count(id), Year(DataI) from iscritti
where Year(DataI) = 2000
group by Year(Datai)
oppure, ma temo sia un dialetto MSSQL, DatePart(Datai, y) 


 codice Delphi.
a) crea una view :
create view IscrByYear (ID, ANNO) as
select ID, EXTRACT (YEAR FROM DATAISCRIZIONE)
FROM ISCRITTI
b) fai la query di raggruppamento sulla view
extract count(ID), ANNO
from IscrByYear
group by ANNO;
Se vuoi un singleton come risposta metti WHERE ANNO = :CheAnno
Se vuoi ridurre il tempo di risposta (IB prima aggiorna la view, dopo ci
fa sopra la query di raggruppo) considera di aggiungere un campo (anno)
alla tabella base (o in una tabella in relazione 1:1 con quella base)
che ti viene calcolato in fase di INSERT tramite trigger (NEW.ANNO =
EXTRACT YEAR FROM NEW.DATAISCRIZIONE) after insert.
Saluti
Paolo Arosio