Help su come scrivere questa query??

venerdì 21 luglio 2006 - 14.09

bluland Profilo | Guru

salve,
ho la necessita' di scrivere la seguente query, con sql server 2000:

ho: "tabella1"
con le colonne:
id, (con le seguenti proprieta': identity = yes(not for replication), identity seed=1,identity increment=1)
matricola (e' un campo che puo' essere anche essere uguale per n record),
data

ecco cosa mi servirebbe fare:

l'UPDATE di DATA dove matricola = '1 numero' e id = 'il piu' basso del numero' e dove data = NULL

quindi detto in parole, fare l'UPDATE della data della matricola dove l'id tra tutte le matricole trovate e' il piu' basso ed ha la data nulla (cioe' non ancora inserita)

un esempio:
id matricola data

3 44444 20/06/1999 10:33.22
4 44444 NULL
6 55555 20/06/2000 10:33.22
7 55555 NULL

UPDATE di data dove matricola = '44444' e id piu' basso e data NULL

ecco il risultato, cioe' quale record sara' update:

id matricola data

4 44444 21/07/2006 10:33.22

idee su come scrivere questa query??
io avevo pensato ad una cosa del genere (ma ovviamente non funziona)

update tabella1 set data= current_timestamp
where
(data = select top 1 * from tabella1 where data = '2222' and data is null)

che ne dite??


Ciciu Profilo | Senior Member


Ciao.
Non ho il tempo di provarlo, per cui Te la butto lì...

update tabella1 set data = getdate()
where matricola = '4444' and
data is null and
id = (select min(id) from tabella1 b where b.matricola = matricola and b.data is null)

Fammi sapere se Ti funziona...
Ciao - Fabio
Fabio G

bluland Profilo | Guru

che cosa e' b??

lbenaglia Profilo | Guru

>ecco cosa mi servirebbe fare:
>
>l'UPDATE di DATA dove matricola = '1 numero' e id = 'il piu'
>basso del numero' e dove data = NULL
>
>quindi detto in parole, fare l'UPDATE della data della matricola
>dove l'id tra tutte le matricole trovate e' il piu' basso ed
>ha la data nulla (cioe' non ancora inserita)

Guarda se questa soluzione può andare:

USE tempdb; GO CREATE TABLE dbo.tabella1( [id] int NOT NULL PRIMARY KEY, matricola int NOT NULL, data datetime NULL ); GO INSERT dbo.tabella1 VALUES(3, 44444, '19990620 10:33.22'); INSERT dbo.tabella1 VALUES(4, 44444, NULL); INSERT dbo.tabella1 VALUES(6, 55555, '20000620 10:33.22'); INSERT dbo.tabella1 VALUES(7, 55555, NULL); GO UPDATE dbo.tabella1 SET data = CURRENT_TIMESTAMP WHERE [id] = ( SELECT MIN([id]) FROM dbo.tabella1 WHERE matricola = 44444 AND data IS NULL ); GO SELECT * FROM dbo.tabella1; GO /* Output: id matricola data ----------- ----------- ----------------------- 3 44444 1999-06-20 10:33:00.220 4 44444 2006-07-21 14:43:18.373 6 55555 2000-06-20 10:33:00.220 7 55555 NULL (4 row(s) affected) */ DROP TABLE dbo.tabella1;

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bluland Profilo | Guru

come se potrebbe andare??

e' PERFETTA!!!!! GRAZIE

solo perche id tra parentesi quadre??

lbenaglia Profilo | Guru

>solo perche id tra parentesi quadre??

Perché in SQL Server 2000, il Query Analyzer lo colorava di blu come una normale keyword.
SSMS invece no ma l'abitudine è dura a morire
In SQL Server le parentesi quadre ti permettono di delimitare gli identificatori irregolari.
Cosa sono?
Leggi i seguenti paragrafi sui Books Online:

"Identifiers "
http://msdn2.microsoft.com/en-us/library/ms175874.aspx

"Delimited Identifiers (Database Engine)"
http://msdn2.microsoft.com/en-us/library/ms176027.aspx

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bluland Profilo | Guru

grazie !
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5