Ik heb 2 tabellen.
1. Gebruiker (User)
2. Data van gebruiker. (Position)
De relatie tussen Gebruiker en Data is 1:n (Data heeft GebruikerID)
Data wordt meerdere keren per dag ingevoerd. Ik wil van alle gebruikers de meest recente Row van vandaag hebben. Hiervoor heb ik het volgende bedacht:
Deze query duurt naar mate de tabellen groeien steeds langer. Dat heeft uiteraard te maken met de 2e select.
Is er een efficientere manier om de meest recente Row (per user) uit een tabel te halen, dus zonder de hele tabel te sorteren en de eerste (=meest recente) Row terug te geven?
1. Gebruiker (User)
2. Data van gebruiker. (Position)
De relatie tussen Gebruiker en Data is 1:n (Data heeft GebruikerID)
Data wordt meerdere keren per dag ingevoerd. Ik wil van alle gebruikers de meest recente Row van vandaag hebben. Hiervoor heb ik het volgende bedacht:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| declare @temp as datetime
declare @date as datetime
declare @strDate as varchar(10)
set @date = getdate()
set @temp = convert(datetime,@date,105)
set @strDate = convert(varchar(10),@temp,105)
--create string notation of current date for comparing purposes
SELECT U.Fullname
,P.Time
FROM User U
INNER JOIN Position P on U.UserID = P.UserID
WHERE
P.Time = (SELECT top 1 P1.Time
from Position P1
where P1.UserID = U.UserID
and convert(varchar(10),P1.Time,105) = @strDate
ORDER BY Time desc) |
Deze query duurt naar mate de tabellen groeien steeds langer. Dat heeft uiteraard te maken met de 2e select.
Is er een efficientere manier om de meest recente Row (per user) uit een tabel te halen, dus zonder de hele tabel te sorteren en de eerste (=meest recente) Row terug te geven?
loading...