Script sql

martedì 16 settembre 2014 - 11.17
Tag Elenco Tags  SQL Server 2008  |  SQL Server Express  |  Access (.mdb)

claude78 Profilo | Newbie

Salve
ho 4 campi...
campo1=regione
campo2= cod. azienda
campo3=data variazione
campo4=stato azienda

select campo1, campo2, max (campo3) from tabella
group by campo1, campo2

Lo script sql è ciò che ho scritto io però non riesco ad andare avanti.
Ti spiego meglio i campi...
Il campo1 rapresenta il codice di una regione... pertanto ogni regione ha un codice
il campo2 rappresenta il codice di un'azienda... può trovarsi anche in diverse regioni
il campo3 è la data in cui inserisco la variazione dello stato azienda...
Il campo4 contiene una sigla ad es. 'A' significa apertura ' c' chiusura che identifica lo stato dell'attività dell'azienda.
Va preso in considerazione che durante l'anno lo stato di un'azienda può cambiare (campo4 )
Pertanto se io voglio sapere lo stato di tutte le aziende nell'ultima variazione come devo fare ???

La seconda domanda invece lo script sql per sapere quali sono le aziende in cui nell'ultima variazione hanno uno stato dell'attività uguale a 'c'.
grazie a tutti

iif Profilo | Expert

Aggiungi alla select i codice dell'azienda e usi la clausola group by

claude78 Profilo | Newbie

Il codice il campo del codice azienda è gia presente nella select forse volevi dire di aggiungere il campo4 ( stato dell'azienda) ed inserirlo nella clausola group by, ma in questo caso lo script mi estrapola tutti i valori massimi corrispondente per ogni stato dell'azienda (campo4) invece a me serve sapere lo stato di tutte le aziende nell'ultima variazione.

ES.
campo1=regione campo2=azienda campo3=data campo4=stato azienda
Marche 1 01/01/2014 A
Marche 2 02/10/2014 A
Marche 2 06/06/2014 C
Lazio 1 03/01/2014 A
Lazio 2 20/01/2014 F
Lazio 2 21/09/2014 F

ALLORA LO SCRIPT DOVREBBE ESTRAPOLARE
Marche 1 01/01/2014 A
Marche 2 06/06/2014 C
Lazio 1 03/01/2014 A
Lazio 2 21/09/2014 F

boccia75 Profilo | Junior Member

Ciao Claude,
prova con questa

select campo1,campo2,max(campo3),(select campo4 from tabella_1 where
a.campo1=campo1 and
a.campo2=campo2 and
max(a.campo3)=campo3)

from tabella_1 a
group by campo1,campo2
order by campo1,campo2

Ciao!

claude78 Profilo | Newbie

Non va !!!
visualizza l'errore "Impossibile avere una funzione aggregazione nella clausola where

boccia75 Profilo | Junior Member

Che versione di sql usi?
L'ho testato da me e lavora egregiamente....

claude78 Profilo | Newbie

Sto su access !!!
Cmq ho passato tutta la nottata ed ho ricacciato questo:
SELECT regione, azienda, data, stato
FROM tabella1
WHERE data=(select max(data) from tabella1 as tab where tabella1.azienda=tab.azienda and tabella1.regione=tab.regione);

Che ne pensi di questo ???

Visto che la query deve lavorare su diverse migliaia di record, secondo te a occhio qual'è più performante come script ????

boccia75 Profilo | Junior Member

Access maledetto!
Se lo script che hai trovato lavora correttamente, non hai problemi.
Mi chiedi delle performance: se hai dubbi sul fatto che lo script possa girare lentamente, magari crea degli indici (si può fare su access?) sui campi della where.
Vedrai che girerà molto più velocemente.
Ciao!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5