Oprettet fre. d. 12. marts 2010 kl. 09:14:57

zyfer
zyfer (12.925 point. Point ude: 0)
www.Logibis.com

Hjælp.. SQL Udvælgelse...

Hej..

Har en SQL udvælgelse jeg ikke kan få til og fungere..(MS-SQL-VB.NET)
-----------------------------------
DATA :

ProjID - Changeddate - StatusID
1 12/3/2010 2
1 13/3/2010 6
1 15/3/2010 5
2 10/2/2010 2
2 13/2/2010 6
3 08/2/2010 5
3 10/2/2010 6

RESULTAT :

ProjID - Changeddate - StatusID
2 13/2/2010 6
3 10/2/2010 6
------------------------------------

Jeg skal bruge de poster hvor den sidste registrering(Changeddate) er StatusID=6

Jeg har følgende SQL :

SELECT G_PROJ.PROJID, G_PROJ.PLANNEDENDDATE, G_PROJ.TASK_NAME, G_PROJ.DESCR, G_PROJSTATUS.STATUSID,G_PROJSTATUS.CHANGEDDATE AS DATE

FROM G_PROJ INNER JOIN G_PROJSTATUS ON G_PROJ.PROJID = G_PROJSTATUS.FK_PROJECT

WHERE (G_PROJSTATUS.CHANGEDDATE IN
(SELECT MAX(G_PROJSTATUS_1.CHANGEDDATE) AS DATE
FROM G_PROJ AS G_PROJ_1 INNER JOIN
G_PROJSTATUS AS G_PROJSTATUS_1 ON G_PROJ_1.PROJID = G_PROJSTATUS_1.FK_PROJECT
GROUP BY G_PROJ_1.PROJID))

GROUP BY G_PROJ.PLANNEDENDDATE, G_PROJ.TASK_NAME, G_PROJ.DESCR, G_PROJSTATUS.STATUSID, G_PROJSTATUS.CHANGEDDATE, G_PROJ.PROJID

HAVING (G_PROJSTATUS.STATUSID = 6)

ORDER BY G_PROJ.PROJID DESC

Dette virker dog ikke, da den medtager alle poster med StatusID=6, også selv om det ikke r den sidste dato (Changeddate)..

Håber nogen kan hjælpe:: :-)

Skrevet fre. d. 12. marts 2010 kl. 09:29:43| #1

buzzzz
buzzzz (46.581 point)
ifyoudo.net
Skal du ikke bare joine de 2 tables ... og så:

WHERE statusid = 6 ?

Jeg kan ikke lige genneskue hvorfor du laver den WHERE IN

Skrevet fre. d. 12. marts 2010 kl. 09:44:21| #2

zyfer
zyfer (12.925 point)
www.Logibis.com
Hej..

Fordi ProjID går igen flere gange, og jeg skal kun bruge de poste med den nyeste dato(Changeddate). Og den skal kun tag dem der har StatusID lig med 6..

ProjID  -  Sidste post registret - Men kun hvis StatusID = 6

Lidt svært og forklare.. :-)

Skrevet fre. d. 12. marts 2010 kl. 09:51:35| #3

buzzzz
buzzzz (46.581 point)
ifyoudo.net
hmmm ...

SÅ noget ala:

SELECT * FROM projs WHERE projid IN
(
SELECT MAX(projid) from status WHERE statusid = 6 GROUP BY projid
)

Overstående er utestet ... men burde det så ik' virke ...

Skrevet fre. d. 12. marts 2010 kl. 10:28:43| #4

zyfer
zyfer (12.925 point)
www.Logibis.com
Hej..

Virker ikke, jeg får stadig alle poster med StatusID=6, også selv om det ikke er sidste dato (Changeddate)...

Skrevet fre. d. 12. marts 2010 kl. 10:52:27| #5

buzzzz
buzzzz (46.581 point)
ifyoudo.net
Dvs ... du skal have MAX Date ... og den status kode som passer til ?

mvh

Skrevet fre. d. 12. marts 2010 kl. 10:59:43| #6

zyfer
zyfer (12.925 point)
www.Logibis.com
Hej..

Jeg skal bruge :

For hver ProjID skal jeg bruge den sidste (nyeste Dato), men KUN hvis StatusID er =6.

Altså, de Projekter(ProjID) der på nuværende tidspunkt(Changeddate) har status 6 (StatusID)....

Skrevet lør. d. 13. marts 2010 kl. 01:22:22| #7

buzzzz
buzzzz (46.581 point)
ifyoudo.net
Tænkt og ikke testet ... pseudo sql


select * from proj P
INNER JOIN ( select projid, MAX(date) from proj GROUP BY projid ) AS t1 ON P.projid = t1.projid AND p.ChangeDate = t1.ChangeDate
WHERE P.Status = 6

Den tmp table:
select projid, MAX(date) from proj GROUP BY projid
Tager senest dato og projid og joiner over på sig selv ... og sammenligner projid og dato ... og så ser om den har status id 6..

Det burde virke ... om end jeg ikke lige helt kan gennemskue din struktur. så burde det her give en ide til hvordan du kan løse det.

mvh

Skrevet lør. d. 13. marts 2010 kl. 11:28:09| #8

zyfer
zyfer (12.925 point)
www.Logibis.com
Hej..

Lige et eks...

Tabel 1 : G_Proj

ProjID - Plannededate - Task_name - Descr

EKS:
1 - 13-03-2010 - abc - lave kaffe
2 - 15-03-2010 - cba - male hus
3 - 10-04-2010 - cab - rydde sne

ProjID = Primærnøgle (Ingen dubletter)

Tabel 2 : G_projstatus

FK_Projekt - Changeddate - StatusID

EKS :
2 - 10-03-2010 - 2
2 - 11-03-2010 - 6
2 - 12-03-2010 - 5
1 - 10-03-2010 - 2
1 - 11-03-2010 - 6
1 - 13-03-2010 - 5
3 - 08-03-2010 - 5
3 - 09-04-2010 - 6

Relation:
G_Proj.ProjID - G_Projstatus.FK_Projekt

Resultat skal så være :

3 - 10-04-2010 - cab - rydde sne

Da det er den eneste der opfylder, StatusID=6 ved sidste dato..

Skrevet lør. d. 13. marts 2010 kl. 12:43:07| #9

buzzzz
buzzzz (46.581 point)
ifyoudo.net
ja, men har du prøvet at lave det med udgangs punkt i min tankegang ?

mvh

Skrevet lør. d. 13. marts 2010 kl. 12:44:39| #10

buzzzz
buzzzz (46.581 point)
ifyoudo.net
Problemet er jo at din sidste table ikke har noget unikt ... da du kun har 3 felter ... og det eneste der kan gøre rækken unik er at tage dato med ... så du har id og dato ... som kan vælge staus.

Derfor tror jeg ikke der er mange andre måder at lave det på.

mvh

Skrevet man. d. 15. marts 2010 kl. 21:01:12| #11

zyfer
zyfer (12.925 point)
www.Logibis.com
Hej Buzzzz

Jeg har fundet en løsning der virker :

SELECT    G_PROJ.PROJID, G_PROJ.TASK_NAME, G_PROJ.DESCR, G_PROJ.PLANNEDENDDATE
FROM  G_PROJ INNER JOIN
                      G_PROJSTATUS ON G_PROJ.PROJID = G_PROJSTATUS.FK_PROJECT
                        WHERE    ((SELECT    TOP (1) STATUSID
                        FROM        G_PROJSTATUS AS G_PROJSTATUS_1
                        WHERE    (G_PROJ.PROJID = FK_PROJECT)
                        ORDER BY CHANGEDDATE DESC) = 2)
GROUP BY G_PROJ.PROJID, G_PROJ.TASK_NAME, G_PROJ.DESCR, G_PROJ.PLANNEDENDDATE
ORDER BY G_PROJ.PLANNEDENDDATE DESC


Men smid lige svar, så får du pointen.....

Skrevet tir. d. 16. marts 2010 kl. 14:10:14| #12

buzzzz
buzzzz (46.581 point)
ifyoudo.net
Hej,

Yes, dit løser det også ... men det andet burde nu også ...

Men alle veje fører til Rom ... næsten da :-)

mvh

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Ændret dato visning i SQL Express

Oprettet den 9. februar 2012 kl. 14.50
simsen giver 30 point for svar | Giv et svar »

Kan ikke få forbindelse til SQL Server...

Oprettet den 9. februar 2012 kl. 11.07
VVC2620 giver 60 point for svar | Giv et svar »

Fejl i data, hvis data er omkredset af {} så skal de...

Oprettet den 9. februar 2012 kl. 09.37
jokkejensen giver 200 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger