【发布时间】:2016-03-28 23:08:30
【问题描述】:
我有两张桌子,一张Members 桌子和一张Plan 桌子。它们的结构如下。
member start_date Mplan Pplan version start_dt end_dt
John 20120701 johnplan johnplan 1 20120601 20130531
John 20130201 johnplan johnplan 2 20130601 20140531
John 20130901 johnplan
John 20131201 johnplan
我需要将Members 表上的start_date 更新为该member 的最小值,但在同一Plan 版本内。
示例:
20130201 将更改为 20120701,20131201 将更改为 20130901。
代码:
UPDATE Members
SET start_date =(
SELECT MIN(start_date) FROM Members a
LEFT JOIN Plan ON Mplan = Pplan AND
start_date BETWEEN start_dt AND end_dt
WHERE member=a.member
AND start_date BETWEEN start_dt AND end_dt
)
不幸的是,这会将每个 start_date 设置为 19900101,也就是该列在整个表中的最小值。
【问题讨论】:
-
您没有将您的内部 SELECT 与您的外部 UPDATE 关联起来。
标签: sql-server sql-update min