Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल तारीख से कम नजदीकी पर शामिल हों

मुझे विश्वास है कि यह सबक्वेरी यह करेगी (परीक्षण नहीं किया गया)।

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ADO.NET के साथ SQL सर्वर के लिए डिफ़ॉल्ट लेनदेन अलगाव स्तर क्या है?

  2. संग्रहीत प्रक्रिया, पैरामीटर के रूप में तालिका का नाम पास करें

  3. क्या हम sql सर्वर को जारी की गई क्वेरी को रद्द कर सकते हैं?

  4. डेटाबेस के बीच स्विच करें, एक साथ दो डेटाबेस का उपयोग करें

  5. आंशिक शब्दों को खोजने के लिए पूर्ण-पाठ-खोज का उपयोग करना (एसक्यूएल सर्वर 2008)