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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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