18. december 2016 - 11:41 Der er 1 kommentar og
2 løsninger

Loop alle TypeId'er records igennem og returner en dato

tblElevator har to kolonner
TypeId, InstallDate, DaysFromTest
7800, '2016-05-03', ?
7800, '2016-05-08', ?
7800, '2016-05-20', ?
7800, '2016-06-14'; ?
Altså mange forskellige InstallDate's pr. TypeId

tblTests har tre kolonner
TypeId, TestDate, Result
7800, '2016-05-06', 'Pos'
7800, '2016-05-09', 'Neg'
7800, '2016-05-17', NULL
7800, '2016-06-14', 'Pos'
Altså mange forskellige test dato'er

Nu vil jeg gerne have opdateret tblElevator's felt DaysFromTest med det antal dage (plus eller minus dage) der er til den nærmeste TestDate, hvor Result <> NULL

Jeg skal lave
1) en opdatering af alle mine mange records i tblElevator
2) en StoredProcedure, som jeg kan kalde med et TypeId, hver gang der kommer en ny record i tblTests, som så løber alle tblElevator igennem med samme TypeId, da test dato'en godt kan være lidt tilbage i tid.

Nogen der har et bud på, hvordan sådan en skal løses ?
/Flemming
18. december 2016 - 19:33 #1
Dette virker til at få den record, som er det mindste antal dage væk fra Installations dato'en - så skal der vel bare loopes...

DECLARE @TypeId int = 7800
DECLARE @InstDate date = '2016-05-08'

SELECT TOP 1 TypeId, TestDate, DATEDIFF(DAY, @InstDate, TestDate) as DaysFromTest
FROM tblTests
WHERE TypeId = @TypeId AND (Result = 'Pos' OR Result = 'Neg')
ORDER BY ABS(DATEDIFF(DAY, @InstDate, TestDate)) ASC
18. december 2016 - 19:36 #2
For Each Record In tblElevator Where TypeId = 7800
    Update tblElevator SET DaysFromTest = ((select top 1)) WHERE Id = (recordid)
Next

Måske skulle man læse lidt sql'sk
18. december 2016 - 21:42 #3
Har fundet en løsning - via dette eksempel
DECLARE db_cursor CURSOR FOR SELECT name, age, color FROM table;
DECLARE @myName VARCHAR(256);
DECLARE @myAge INT;
DECLARE @myFavoriteColor VARCHAR(40);
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @myName, @myAge, @myFavoriteColor;
WHILE @@FETCH_STATUS = 0 
BEGIN 

      --Do stuff with scalar values

      FETCH NEXT FROM db_cursor INTO @myName, @myAge, @myFavoriteColor;
END;
CLOSE db_cursor;
DEALLOCATE db_cursor;
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester