Sql 如何更新找到具有最高值和第二高值的日期的语句

Sql 如何更新找到具有最高值和第二高值的日期的语句,sql,Sql,我需要更改“是/否”列,其中“日期”列的值最高,第二高 Id菜单不为空主键;DayINT-NULL;是/没有 100 ; 1.1. 101 ; 2.0 102 ; 3.1. 103 ; 4.0 104 ; 5.0 我应该得到的结果是 Id菜单不为空主键;DayINT-NULL;是/没有 100 ;

我需要更改“是/否”列,其中“日期”列的值最高,第二高

Id菜单不为空主键;DayINT-NULL;是/没有 100 ; 1.1. 101 ; 2.0 102 ; 3.1. 103 ; 4.0 104 ; 5.0

我应该得到的结果是 Id菜单不为空主键;DayINT-NULL;是/没有 100 ; 1.1. 101 ; 2.0 102 ; 3.1. 103 ; 4.1. 104 ; 5.一,

我可以换电话 更新菜单集是/否=1,其中日期=4

但由于天数将继续上升,这意味着我必须在撰写声明之前知道哪一天是最高的。如何更新找到具有最高值和第二高值的日期的语句
我尝试了更新菜单集YES/NO=1,其中MAXday

测试驱动查询设计TDQD再次用于救援

查找最大日值 查找第二个最大日值 第二个最大日是不是最大日值的最大日值

选择不包含第二个最大值或最大日值的行 这些是需要将“是/否”位设置为1的行

更新两组行 显然,对于这两组数据,您可以将SELECT*替换为UPDATE菜单集Yes\U 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)

尝试更新菜单设置yes_no=1,其中day=MAXday或day=MAXday-1;或者,如果没有顺序,并且您不知道第二个最大值将是最大值下的最大值,则更新菜单设置是\否=1,其中日期=最大值或日期=从菜单中选择最大值,您想做什么?从您的描述中,我看不出如何在ID=101的行中得到0;事实上,也不是100或102。“day列中最高的两个值”是4和5,因此所有早期的值1、2、3都应该将yes/no位设置为no,不是吗?
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)
             )
SELECT *
  FROM Menu
 WHERE Day >= (SELECT MAX(day)
                 FROM Menu
                WHERE day != (SELECT MAX(day) FROM Menu)
              )
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)