2017-08-29 33 views
2

之间的最小日期表我有2个表: @Temdate1更新2台

+------+------------+---------------+--------+ 
| Year | Entry_Date | DeliveryMonth | Symbol | 
+------+------------+---------------+--------+ 
| 2016 | 2016-01-07 | June   | ABC | 
| 2015 | 2015-01-06 | June   | ABC | 
| 2014 | 2014-01-05 | June   | ABC | 
| 2016 | 2016-03-05 | Sep   | CDE | 
| 2015 | 2015-03-04 | Sep   | CDE | 
| 2014 | 2014-03-03 | Sep   | CDE | 
+------+------------+---------------+--------+ 

AllProducts

+-----------------+---------------+--------+ 
|  Date  | DeliveryMonth | Symbol | 
+-----------------+---------------+--------+ 
| 2016-01-07  | June   | ABC | 
| 2016-01-08  | June   | ABC | 
| 2016-01-09  | June   | ABC | 
| 2016-01-10  | June   | ABC | 
| 2015-01-01  | June   | ABC | 
| 2015-01-02  | June   | ABC | 
| 2015-01-03  | June   | ABC | 
| 2014-01-05  | June   | ABC | 
+-----------------+---------------+--------+ 

结果我要寻找更新的表@ Temdate1:​​

+------+------------+---------------+--------+ 
| Year | Entry_Date | DeliveryMonth | Symbol | 
+------+------------+---------------+--------+ 
| 2016 | 2016-01-07 | June   | ABC | 
| 2015 | 2015-01-01 | June   | ABC | 
| 2014 | 2014-01-05 | June   | ABC | 
| 2016 | 2016-03-05 | Sep   | CDE | 
| 2015 | 2015-03-04 | Sep   | CDE | 
| 2014 | 2014-03-03 | Sep   | CDE | 
+------+------------+---------------+--------+ 

我有这个查询来找到最小的(ear最简单的)给定年份和给定产品的日期。有了这个查询如何更新Temdate1与最早的日期,当它没有最早的日期?

SELECT 
Year 
,CASE 
    WHEN MIN([Date])<entry_date THEN MIN([Date]) 
    ELSE entry_date 
END AS MDate 
FROM @TempDate1 a 
INNER JOIN AllProducts b on a.DeliveryMonth =b.DeliveryMonth AND a.Symbol = b.Symbol 
GROUP BY Year,entry_date 
+0

提供的数据结构和数据样本 – Horaciux

+0

所以你问如何将用户的输出你查询更新Temdate1?你能告诉我们表Temdate1的结构吗? – Lamar

+0

您应该能够在更新声明中使用此case子句。 – Eli

回答

3

看来你犯了一个错字在预期的结果,也许是我

Update a 
    set Entry_Date = case when a.Entry_Date> b.Date then b.Date else a.Entry_Date end 
from 
    @Tempdate1 a 
inner join 
    @AllProducts b 
    on b.Symbol = a.Symbol 
    and b.DeliveryMonth = a.DeliveryMonth 
    and year(b.[Date]) = a.Year 

http://rextester.com/AQXR21093

+0

@JulGreen - 这就是我所说的CASE声明可以在这里使用。 – Eli

+0

@Horaciux非常感谢你这是我正在寻找,无法弄清楚。在'Entry_Date =' – JulGreen

+0

之后,我将整个陈述放在括号内。我刚纠正了http://rextester.com/AQXR21093中的错字 – Horaciux