これで木の木が見えず、シンプルだと確信しています。 は私がMS-SQLの最大IDと内部結合
表1
NiD Name
1 Peter
2 John
3 Arthur
表2
ID NiD Value
1 1 5
2 2 10
3 3 10
4 1 20
5 2 15
マックスは
NiD ID Value
1 4 20
2 5 15
3 3 10
これで木の木が見えず、シンプルだと確信しています。 は私がMS-SQLの最大IDと内部結合
表1
NiD Name
1 Peter
2 John
3 Arthur
表2
ID NiD Value
1 1 5
2 2 10
3 3 10
4 1 20
5 2 15
マックスは
NiD ID Value
1 4 20
2 5 15
3 3 10
これは、私はそれを行うだろうかですが、私は表2は、表1のレコードに対応するエントリがない場合ID
とValue
がNULL
になると思う。
SELECT NiD, ID, [Value]
FROM Table1
OUTER APPLY (
SELECT TOP 1 ID, [Value]
FROM Table2
WHERE Table1.NiD = Table2.NiD
ORDER BY [Value] DESC
) AS Top_Table2
は、あなたが使用できる結果の結合されたテーブルに関連するレコードの最大IDを返すようにしようとしていますこの場合のrow_number()
:
select NiD, ID, Value
from (select t2.*,
row_number() over (partition by NiD order by ID desc) as seqnum
from table2 t2
) t2
where seqnum = 1;
table2
にはすべてのIDがあるので、table1
は必要ありません。
あなたは名前が必要な場合は、INNERがt2.nid = table1.nid' ON TABLE1に参加して、あなたが働いていた –
CREATE TABLE Names
(
NID INT,
[Name] VARCHAR(MAX)
)
CREATE TABLE Results
(
ID INT,
NID INT,
VALUE INT
)
INSERT INTO Names VALUES (1,'Peter'),(2,'John'),(3,'Arthur')
INSERT INTO Results VALUES (1,1,5),(2,2,10),(3,3,10),(4,1,20),(5,2,15)
SELECT a.NID,
r.ID,
a.MaxVal
FROM (
SELECT NID,
MAX(VALUE) as MaxVal
FROM Results r
GROUP BY NID
) a
JOIN Results r
ON a.NID = r.NID AND a.MaxVal = r.VALUE
ORDER BY NID
ここで私が使用しているものです同様の状況では、データセットが大きすぎない(1M行未満)場合、パフォーマンスは良好でした。
SELECT
table1.nid
,table2.id
,table2.value
FROM table1
INNER JOIN table2 ON table1.nid = table2.nid
WHERE table2.value = (
SELECT MAX(value)
FROM table2
WHERE nid = table1.nid)
ORDER BY 1
おかげで、欲しいものを反映して、選択リストを更新T2 'と' t2'を交換するゴードンのSQLを変更他のテーブルが依存しているので、内部結合を使用するために少し魅力的です。 – BigIWT