Filtrare solo le ultime revisioni

martedì 10 luglio 2012 - 23.34
Tag Elenco Tags  Access (.mdb)  |  Office 2010

MIKELE4U Profilo | Newbie

ciao
sono nuovo di questo forum e quindi mi presento.
Mi chiamo Michele e sono un principiante di ACCESS
Vorrei essere aiutato nel risolvere il mio problema che provo a spiegare

Ho un archivio disegni cosi congeniato

tabella_progetti
-id_pr (chiave primaria)
-progetto

tabella_disegni
- id_dis (chiave primaria)
- id_pr (collegata con la tabella_progetti)
- descrizione

tabella_revisioni
- id_rev (chiave primaria)
- id_dis (collegata con la tabella_disegni)
- rev (valori possibili 0,1,2,...N)
- data rev

ecco la domanda:
per ogni progetto (campo progetto della tabella_progetti) vorrei estrapolare tutti i disegni che li competono (campo descrizione della tabella_disegni) che hanno lo stato di revisione maggiore (campo rev della tabella_revisioni)

grazie

micto27 Profilo | Senior Member

prova con qualcosa del genere

ciao, Michele

select p.progetto, d.id_dis, d.descrizione, r.rev, r.data_rev
from tabella_disegni d
inner join tabella_revisioni r on d.id_dis = r.id_dis
inner join tabella_progetti p on d.id_pr = p.id_pr
where not exists
(select 1 from tabella_revisioni r2
where r2.id_dis = r.id_dis
and r2.rev > r.rev);

boccia75 Profilo | Junior Member

Ciao!
Questi sono gli script per le tabelle:
CREATE TABLE [dbo].[tabella_revisioni](
[id_rev] [decimal](10, 0) NULL,
[id_dis] [decimal](10, 0) NULL,
[rev] [decimal](10, 0) NULL,
[data_rev] [varchar](8) NULL
) ON [PRIMARY]


CREATE TABLE [dbo].[tabella_disegni](
[id_dis] [decimal](10, 0) NULL,
[id_pr] [decimal](10, 0) NULL,
[descrizione] [varchar](100) NULL
) ON [PRIMARY]


CREATE TABLE [dbo].[tabella_progetti](
[id_pr] [decimal](10, 0) NULL,
[progetto] [varchar](100) NULL
) ON [PRIMARY]


Questi gli script di alimentazione delle tabelle:

insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (1,1,1,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (2,1,2,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (3,1,3,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (4,2,1,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (5,2,2,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (6,3,1,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (7,4,1,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (8,4,2,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (9,4,3,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (10,4,4,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (11,5,1,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (12,5,2,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (13,6,1,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (14,6,2,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (15,6,3,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (16,7,1,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (17,7,2,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (18,8,1,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (19,9,1,'111111')
insert into tabella_revisioni(id_rev,id_dis,rev,data_rev) values (20,9,2,'111111')


insert into tabella_progetti(id_pr,progetto) values (1,'progetto1')
insert into tabella_progetti(id_pr,progetto) values (2,'progetto2')
insert into tabella_progetti(id_pr,progetto) values (3,'progetto3')


insert into tabella_disegni(id_dis,id_pr,descrizione) values (1,1,'disegno_num1_prog1')
insert into tabella_disegni(id_dis,id_pr,descrizione) values (2,1,'disegno_num2_prog1')
insert into tabella_disegni(id_dis,id_pr,descrizione) values (3,1,'disegno_num3_prog1')
insert into tabella_disegni(id_dis,id_pr,descrizione) values (4,2,'disegno_num1_prog2')
insert into tabella_disegni(id_dis,id_pr,descrizione) values (5,2,'disegno_num2_prog2')
insert into tabella_disegni(id_dis,id_pr,descrizione) values (6,2,'disegno_num3_prog2')
insert into tabella_disegni(id_dis,id_pr,descrizione) values (7,3,'disegno_num1_prog3')
insert into tabella_disegni(id_dis,id_pr,descrizione) values (8,3,'disegno_num2_prog3')
insert into tabella_disegni(id_dis,id_pr,descrizione) values (9,3,'disegno_num3_prog3')



Questo è il set di risultati:
id_pr descrizione rev
1 disegno_num1_prog1 3
1 disegno_num2_prog1 2
1 disegno_num3_prog1 1
2 disegno_num1_prog2 4
2 disegno_num2_prog2 2
2 disegno_num3_prog2 3
3 disegno_num1_prog3 2
3 disegno_num2_prog3 1
3 disegno_num3_prog3 2


che puoi ottenere lanciando questa query:

select tabella_progetti.id_pr,tabella_disegni.descrizione,tabella_revisioni.rev
from tabella_progetti,tabella_disegni,tabella_revisioni
where tabella_progetti.id_pr=tabella_disegni.id_pr
and
tabella_disegni.id_dis=tabella_revisioni.id_dis
and tabella_revisioni.rev=(select
max(a.rev) from tabella_revisioni a
where tabella_revisioni.id_dis=a.id_dis)



Ciao!

MIKELE4U Profilo | Newbie

perfetto
funziona, grazie mille

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