15. april 2016 - 13:03Der er
4 kommentarer og 1 løsning
IF del af tekststreng = anden tekststreng... do..?
Hej alle! Jeg er langt fra sikker på det er den rigtige gruppe, men den er nok ikke heeelt forkert...
Ok, jeg sidder og roder med at lave en hjemmeside der henter noget data fra en MS SQL og jeg er langt fra ekspert på området! Det er en side som er skrevet af en anden gut, det er altså ikke noget jeg selv har lavet, men jeg har dog kunne gennemskue det meste, ind til nu!
Vi har nogen værdier der bliver gemt time for time i SQL og jeg kunne godt tænke mig nu kun at hive de 4 første værdier i hvert døgn frem fra databasen.
I dag ser koden således ud, den henter alle værdier i den valgte periode: <% Do until Rs2.EOF If IsNull(Rs2("BatchId")) Then %> <TR>
Jeg har fundet en workaround hvor jeg indsætter en 'Rs2.Movenext' og gentager koden i tabellerne igen, det har jeg så gjort de 4 gange og derefter indsat 20 stk 'Rs2.MoveNext' i streg... Den løsning virker sådan da, men når jeg henter data der går hen over sommer/vintertid bliver dataene forskudt en time!
I "TimePoint" variablen er der dato og tidsstempel som tekststreng i formatet "DD-MM-YYYY hh:mm:ss". Jeg kunne derfor godt tænke mig på en eller anden måde at få ændret [b]Else[/n] som ses i koden til noget i stil med (rent funktionsmæssigt):
Else if Rs2("TimePoint") contains "00:59:00" OR "01:59:00" OR "02:59:00" OR "03:59:00"
Altså så den kun laver tabellen hvis tidsstemplet passer. Jeg er bare ikke helt sikker på hvordan jeg skal skrive det for at det er korrekt!
Håber der er nogen der kan hjælpe eller evt. har en bedre løsningsidé!
INSERT INTO #tmpValues(BatchId) SELECT BatchId FROM Batch WHERE Batch.LogTime BETWEEN <StartTime> AND <StopTime>;
CREATE UNIQUE INDEX I_BatcId ON #tmpValues(BatchId);
UPDATE #tmpValues SET TimePoint = (SELECT LogTime FROM Batch WHERE Batch.BatchId = #tmpValues.BatchId), RenTotTime = (SELECT SUM(_Float) FROM LogData WHERE LogData.BatchId = #tmpValues.BatchId AND (LogData.TagId = 25 OR LogData.TagId = 29 OR LogData.TagId = 33));
Så jeg må kunne tilføje noget i den sidste linje så den kun finder de relevante data? Noget i stil med "AND LogData.TimePoint = ????"
Jeg prøvede med AND LogData.Timepoint = "% 00:59:00" men det virkede ikke... Har også prøvet med '% 00:59:00'
Som sagt er jeg ikke ligefrem ekspert i SQL! ;)
Synes godt om
Slettet bruger
18. april 2016 - 14:25#3
Maybe something like this:
INSERT INTO #tmpValues(BatchId,TimePoint,RenTotTime) SELECT TOP 4 Batch.BatchId, LogTime, SUM(_Float) FROM Batch INNER JOIN LogData ON Batch.BatchId = LogData.BatchId WHERE Batch.LogTime BETWEEN <StartTime> AND <StopTime> AND (LogData.TagId = 25 OR LogData.TagId = 29 OR LogData.TagId = 33) GROUP BY Batch.BatchId, LogTime ORDER BY Batch.BatchId DESC;
PS. This includes the update, so no need for that and for that matter with 4 rows no need for the index neither.
WHERE Batch.LogTime BETWEEN <StartTime> AND <StopTime>;
Til:
WHERE Batch.LogTime BETWEEN <StartTime> AND <StopTime> AND DATEPART(HOUR, Batch.LogTime) BETWEEN 0 AND 3;
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.