08. oktober 2012 - 09:38Der er
11 kommentarer og 1 løsning
Returnere kun en forekomst af en given datetime kombineret med et nr. samt et iID nr.
Jeg skal finde et "NR" udfra en given datetime imellem en startime og sluttime plus 10 min, hvordan er det muligt kun at få en forekomst ud af dette selvom der er forskellige iID'er, det skal være den første forekommende Startime.
Timestamp og nr er i en tb, og Starttime, Stoptime og iID er i en anden tb, plus yderligere to tb'er
Så resultatet skulle gerne kun være denne første: Timestamp Starttime Stoptime User_ID NR iID 2012-09-13 13:36:38.010 2012-09-13 13:27:39.953 2012-09-13 13:30:20.763 MJH 7245 77239
Jeg har denne SQL syntaks, jeg håber der er en der kan hjælpe mig med at modificere denne :-)
SELECT DISTINCT dbo.T1.Timestamp, dbo.T2.StartTime, dbo.T2.StopTime, dbo.T1.User_ID, dbo.T1.NR, dbo.T2.iID FROM dbo.T1 INNER JOIN dbo.T2 INNER JOIN dbo.T3 ON dbo.T2.iID = dbo.T3.RID INNER JOIN dbo.T4 ON dbo.T2.iUserID = dbo.T4.iUserId ON dbo.T1.User_ID = dbo.T4.OsLogin WHERE (dbo.T1.Timestamp BETWEEN DATEADD(MINUTE, 0, dbo.T2.StartTime) AND DATEADD(MINUTE, 10, dbo.T2.StopTime))
Den første hvor jeg lige bytter om på TOP(1) Distinct med Distinct TOP(1) først, vil virke på en forekomst i hele query'en. men jeg skal bruge en forekomst af hver gruppe "TimeStamp", jeg håber det er til at forstå jvnf. nedenstående.
Dette ligger udenfor dit spørgsmål, men jeg kan ikke dy mig: Så vidt jeg kan se bruger du ikke nogen data fra tabellerne T3 eller T4 i denne sql forespørgsel, så i tilslutning til #1 vil jeg foreslå, at du prøver denne simplere forespørgsel:
SELECT T1.Timestamp, T2.StartTime, T2.StopTime, T1.User_ID, T1.NT, T2.iID FROM T1 JOIN T2 ON T1.Timestamp BETWEEN T2.StartTime AND DATEADD(MINUTE, 10, dbo.T2.StopTime) ORER BY StartTime ASC LIMIT 1
Afhængigt af hvilke data du har i dine tabeller er det muligt, at du er nødt til at bruge SELECT DISTINCT.
Ja, naturligvis, LIMIT er mysql. Beklager. Og det er naturligvis kun op til dig selv hvordan du joiner. Det jeg observerer er, at alle de seks felter du vil have skrevet ud befinder sig i T1 og T2, og de to tabeller kan du tilsyneladende joine direkte. Du skulle således få samme resultat ud af din forespørgsel hvadenten du kun joiner T1 og T2 eller du joiner med T3 og T4 også. Eller tager jeg fejl?
Jeg er ked af at jeg ikke fik formuleret mig korrekt i mit spørgsmål, så det er nok bedst at jeg lukker dette spørgsmål og oprette et nyt, eller er der andre der har en bedre ide, f.eks at ændre spørgsmåls fomuleringen :-)
Hvis du mener du kan tydeliggøre problemstillingen ved at omformulere spørgsmålet, med et frisk spørgsmål får du frisk opmærksomhed fra Ekspertens medlemmer. Hvad du måtte omformulere her bliver sandsynligvis kun set af de der allerede deltager i tråden.
Returnere kun en forekomst fra en gruppe af en given datetime kombineret med et nr. samt et iID nr. Jeg skal finde et "iID" udfra en given datetime (TimeStart) imellem en starttime og en sluttime plus 10 min, hvordan er det muligt kun at få en forekomst af hver gruppe ud af dette, selvom der er forskellige iID'er, og tiden overlapper hinanden, det skal være den første forekommende Starttime, nå iID er fundet og brugt skal der helst ikke søges mere på denne i resten af forespørgelsen. :-)
Timestamp, NR og UserID er i t1, og Starttime, Stoptime, UserID og iID er i t2,
Så resultatet skulle gerne kun være den første forespørgelsen finder i hver gruppe, tiden der søges for er = (Where) : Timestamp Starttime Stoptime UserID NR iID 2012-09-13 13:36:38.010 2012-09-13 13:27:39.953 2012-09-13 13:30:20.763 MJH 7245 77239 2012-09-13 13:37:48.001 2012-09-13 13:32:58.513 2012-09-13 13:33:08.200 JHM 8245 77780
Jeg har denne SQL syntaks, jeg håber der er en der kan hjælpe mig med at modificere denne :-)
SELECT DISTINCT dbo.T1.Timestamp, dbo.T2.StartTime, dbo.T2.StopTime, dbo.T1.UserID, dbo.T1.NR, dbo.T2.iID FROM dbo.T1 INNER JOIN dbo.T2 INNER JOIN dbo.T1 ON dbo.T2.iUserID = dbo.T1.iUserId WHERE (dbo.T1.Timestamp BETWEEN DATEADD(MINUTE, 0, dbo.T2.StartTime) AND DATEADD(MINUTE, 10, dbo.T2.StopTime))
Jeg lukker spørgsmålet og giver therealyoda point, da han kom tættest på med en løsning, jeg skal dog arbejde videre med den, da den ikke helt har løst mit problem :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.