2017-09-29 8 views
1

の値よりも小さい最も近い記録に参加するにはどのように、私はそのvalue列に1,3,4,8とテーブルtableを持っており、そのstarting列内の偶数番号のテーブルlookupこの例では、T-SQL

私はこの

SELECT 
    value, starting 
FROM 
    table 
LEFT JOIN 
    lookup ON lookup.starting < value 

のようなものですが、唯一のvalue未満最高startingを持つ行を結合するクエリを実行したいです。

予想される出力は、私はこれをお勧めします。この

value | starting 
------+------- 
1 | null 
3 | 2 
4 | 2 
8 | 6 
+0

現在のクエリではどのような結果が得られますか?私は希望の出力に2行を追加していると仮定します:(8,4)&(8,6)? – SEarle1986

+0

おっと、(8,2)? – SEarle1986

答えて

1

次のようになります。

SELECT value, starting 
FROM table 
CROSS APPLY (select top 1 starting from lookup where lookup.starting < value order by value desc) as subquery(starting) 

トップと秩序の部分は一つだけ、適した、結果を得ることを確認するために協力します。

0
SELECT value, 
     starting 
FROM (
      SELECT value, 
        starting, 
        ROW_NUMBER() OVER (PARTITION BY value ORDER BY starting DESC) as cnt 
      FROM #Table t 
        LEFT JOIN #Lookup l 
         ON l.starting < t.value 
     ) a 
WHERE cnt = 1