sql >> データベース >  >> RDS >> Sqlserver

日付より小さい最も近い SQL 結合

    このサブクエリがそれを行うと信じています (テストされていません)。

    select *, 
       (select top 1 Discount 
        from table2 
        where table2.Date <= t.Date 
        order by table2.Date desc) as Discount
    from Table1 t
    

    ただし、おそらく最もパフォーマンスが高いとは言えません。

    編集:

    テストコード:

    create table #table1 ([date] datetime, val int)
    create table #table2 ([date] datetime, discount int)
    
    insert into #table1 ([date], val) values ('1/26/2010', 10)
    insert into #table1 ([date], val) values ('1/25/2010', 9)
    insert into #table1 ([date], val) values ('1/24/2010', 8)
    insert into #table1 ([date], val) values ('1/24/2010', 9)
    insert into #table1 ([date], val) values ('1/23/2010', 7)
    insert into #table1 ([date], val) values ('1/22/2010', 10)
    insert into #table1 ([date], val) values ('1/21/2010', 11)
    
    insert into #table2 ([date], discount) values ('1/26/2010', 2)
    insert into #table2 ([date], discount) values ('1/23/2010', 1)
    insert into #table2 ([date], discount) values ('1/20/2010', 0)
    
    select *, 
       (select top 1 discount 
        from #table2 
        where #table2.[date] <= t.[date]
        order by #table2.[date] desc) as discount
    from #table1 t
    
    drop table #table1
    drop table #table2
    

    結果:

    2010-01-26 00:00:00.000 10  2
    2010-01-25 00:00:00.000 9   1
    2010-01-24 00:00:00.000 8   1
    2010-01-24 00:00:00.000 9   1
    2010-01-23 00:00:00.000 7   1
    2010-01-22 00:00:00.000 10  0
    2010-01-21 00:00:00.000 11  0
    


    1. Hibernate、MySQL、Repeatという名前のテーブル-奇妙な動作

    2. MySQLで行を非アクティブにする

    3. MySQL用のNavicat

    4. JDBCドライバーを使用してSQLServerでデフォルトの行プリフェッチを設定します