Newsgroup: it.comp.software.database
Titolo: Soluzione Query MySql 4.1

Ho una semplice tabella con tre campi
data,  nome,  ore, id_project
serve per tenere traccia delle ore e di chi ha lavorato su un determinato
progetto
come faccio a scoprire quanti giorni sono in totale dove almeno due persone
hanno
collaborato alla realizzazione del progetto
Esempio tabella
+---------------+--------------+------------+-------+
| 2003-01-01        Silvia             8            A3    |
| 2003-01-01        Mario            8            A3    |
| 2003-01-02        Silvia             8            A3    |
| 2003-01-03        Alex               8            A3    |
| 2003-01-04        Silvia             7            A3    |
| 2003-01-04        Mario             8            A3    |
| 2003-01-04        Alex               7            A3    |
+---------------+--------------+------------+-------+
Qui Il risultato deve essere 2 giorni
In effetti solo il primo gennaio e il 4 gennaio hanno lavorato più di una
persona
al progetto,  il 2 e il 3 gennaio viene ignorato
ho provato la query in vari modi restituisce sempre 7
==========================
Select  count(data) as nw_date
from h_table
where id_project='A3'
group by id_project
==========================
Un consiglio ?
Ringrazio in anticipo

 al progetto,  il 2 e il 3 gennaio viene ignorato
CREATE TABLE temp AS SELECT data, id_project, count(Nome) AS conteggio
FROM h_table GROUP BY data, id_project
HAVING conteggio > 1;
ti restituisce una tabella con data, id_project e conteggio per quei
progetti su cui almeno 2 persone hanno collaborato nello stesso giorno.
SELECT count(*) as nw_date from temp;
ti restituisce il numero di giorni in questione.
Non riesco a farla con una sola Select, visto che il MySQL non supporta le
subselect.
saluti
N! Xau

 schrieb im Newsbeitrag
news:btkmiv$8l10t$1...@ID-183966.news.uni-berlin.de...

da mysql 4.1 vengono sopportate, volevo appunto evitare di fare due query

 ha scritto nel messaggio
news:btkhfj$83frh$1...@ID-195894.news.uni-berlin.de...


.
Ciao,
premetto che non conosco mySql ma una query è sempre una query,
-------------------------------------
Select Count(1) AS nw_date
FROM  (Select  Data
       from h_table
       where id_project='A3'
       GROUP BY Data
       HAVING count(nome)>1) x
-------------------------------------
Risultato
---------------------
nw_date
-----------
          2
(righe interessate: 1)
---------------------
Ciao Giorgio

 da mysql 4.1 vengono sopportate, volevo appunto evitare di fare due query
Beh, allora, partendo dalla query che ti ho scritto, il resto non dovrebbe
essere difficile.
Qualcun altro ti ha gia' indicato la strada, anche se vale solo per un
id_project e non per tutti.
saluti
N! Xau

 -------------------------------------
Innanzitutto vi rigrazio per la vostra disponibilità,
avevo provato varie cose, non funzionanti.
Questa funziona benissimo, solo che non ho capito nulla,
Perchè quel  count(1)
e la x finale

 ha scritto nel messaggio
news:btn1ml$96m6o$1...@ID-195894.news.uni-berlin.de...

Ciao
la Count(1) equivale a Count(*)  o in questo caso a Count(Data)  se data non
ammette valori Null.
La x (o un nome a tuo piacere) è l'alias della SubTabella,  in MsSqlServer e
in MsAccess è necessaria, penso anche in MySql.
Forse in questo modo è più chiaro l'utilizzo dell'alias ( non te l'ho
proposta perché non so se MySql supporta il COUNT DISTINCT)
------------------------------------------------
Select Count(DISTINCT H1.Data) nw_date
FROM h_table  H1 INNER JOIN
     (Select  Data
      from h_table
      where id_project='A3'
      GROUP BY Data
      HAVING count(nome)>1)  H2
      ON H1.Data=H2.Data
--------------------------------------------------
Lo stesso risultato lo puoi ottenere con una SubQuery nella clausola WHERE,
in questo caso l'alias non serve ma tieni presente che questo tipo di
soluzione è meno performante.
--------------------------------------------
Select Count(DISTINCT Data) nw_date
FROM h_table
WHERE Data IN (Select  Data
               from h_table
               where id_project='A3'
               GROUP BY Data
               HAVING count(nome)>1)
--------------------------------------------
Ciao Giorgio.

Grazie per la delucidazione
ora č tutto chiaro. avevo inutilmente cercato in rete,
sei stato piů veloce te a rispondere, e penso non avrei trovato nulla
Ti volevo informare che le query da te proposte sono
sopportate da mysql 4.1  :-)

 ha scritto nel messaggio
news:btn62m$9d702$1...@ID-195894.news.uni-berlin.de...

Bene quando implementeranno le stored procedure e le user function ci farň
un pensierino.
Supporta i trigger
------------------------
CREATE TRIGGER nome ON nomeTabella
FOR INSERT, UPDATE, DELETE
AS
...........
--------------------------
e i campi calcolati ?
-----------------------------
CREATE TABLE t_Prova (
  Articolo varchar(20),
  Qt numeric(18,6),
  Prezzo numeric(18,2),
  Importo AS ROUND(QT*Prezzo,2)
)
-----------------------------
Ciao Giorgio