GILT Ich habe die folgende AbfrageSQL Server 2014 UNION in CROSS
SELECT DISTINCT
d.UserName,
i.itemID,
d.Score,
d.StoreCode,
d.Location
FROM
G.dbo.Users d
LEFT JOIN
G.dbo.Emails s on d.UserName=s.UserName
CROSS APPLY
(
SELECT TOP (1)
ii.ItemID
FROM
G.dbo.Dump ii
WHERE
ii.Username=d.UserName
AND
ii.endTime>DATEADD(hh,3,getDate())
) i
WHERE
s.serName is null
AND
d.Score>@_Score
AND
(d.processed=0)
GROUP BY
d.UserName,
i.itemID,
d.Score,
d.StoreCode,
d.Location
ORDER BY
d.UserName ASC
Jetzt muss ich es ändern, da Tabelle G.dbo.Dump
hat in 20 kleinere Tische aufgeteilt worden und jetzt habe ich Dump_00
-Dump_19
Ich versuche, Teil des CROSS APPLY
Abschnitt ändern UNION
auf diese Weise
CROSS APPLY
(
SELECT TOP (1)
ii.ItemID
FROM
(
SELECT TOP (1) FROM G.dbo.Dump_00
UNION
SELECT TOP (1) FROM G.dbo.Dump_01
UNION
.....
SELECT TOP (1) FROM G.dbo.Dump_19
) ii
WHERE
ii.UserName=d.UserName
AND
ii.EndTime>DATEADD(hh,3,getDate())
) i
aber Ergebnis mit funktioniert nicht wie erwartet
kann vorschlagen, ob UNION
der richtige Weg ist und im Falle, wie man anwendet, oder eine andere Lösung?
Danke!
was soll es zurückgeben? 'TOP 1'' ohne' ORDER BY' garantiert keine bestimmte Zeile. –
Also müssen wir auch Gedankenleser sein, um zu wissen, was "nicht wie erwartet funktioniert" eigentlich bedeutet? –
@MartinSmith Es soll Username und First (immer noch aktiv) Item von Benutzern in Sellers-Tabelle, aber nicht in E-Mail-Tabelle. In Bezug auf TOP 1, ja, Sie haben recht, aber es ist genug, es gibt ein zufälliges Element mit endtime> DateAdd ... nicht hinzugefügt Order BY, um Verarbeitungszeit seit Dump Tabelle mehr als 100 Millionen Datensätze zu reduzieren. – Joe