我需要更改“是”/“否”列,其中日期列具有最高值和第二高值。
Id菜单(INT NOT NULL PRIMARY KEY);日(INT NULL);是/否(BIT NUL)
100; 1; 1
101; 2; 0
102; 3; 1
103; 4; 0
104; 5; 0
我应该得到的结果是
Id菜单(INT NOT NULL PRIMARY KEY);日(INT NULL);是/否(BIT NUL)
100; 1; 1
101; 2; 0
102; 3; 1
103; 4; 1
104; 5; 1
我可以改变这一行 更新菜单设置是/否= 1天数= 4
但是,由于日子将继续上升,这意味着我必须知道哪一天是写作声明的最高日期。如何更新查找具有最高值和第二高值的日期的语句 我尝试了UPDATE菜单SET YES / NO = 1 WHERE MAX(day)
答案 0 :(得分:0)
测试驱动查询设计(TDQD)再次拯救。
SELECT MAX(day) FROM Menu
SELECT MAX(day)
FROM Menu
WHERE day != (SELECT MAX(day) FROM Menu)
第二个最大日期是最大日值,而不是最大日值。
SELECT *
FROM Menu
WHERE Day < (SELECT MAX(day)
FROM Menu
WHERE day != (SELECT MAX(day) FROM Menu)
)
这些是需要将No / No位设置为零的行。
SELECT *
FROM Menu
WHERE Day >= (SELECT MAX(day)
FROM Menu
WHERE day != (SELECT MAX(day) FROM Menu)
)
这些是需要将No / No位设置为1的行。
显然,您可以将SELECT *
替换为UPDATE Menu SET Yes_No = 0
(或1
)两组数据。如果您的DBMS允许您从正在更新的表中进行选择(并非所有DBMS都这样做),您可以将这两者合并为一个操作:
UPDATE Menu
SET Yes_No = (CASE WHEN day < (SELECT MAX(day) FROM Menu
WHERE day != (SELECT MAX(day) FROM Menu))
THEN 0
ELSE 1 END)