如何在没有order by的情况下获取最后一行并为变量赋值?

frebpwbc  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(226)

我有一个在视图中的查询,因此不能使用order by。我有一个名为course的列,它是一个int列,可以有许多重复值。还有一个名为status的列,status列也是int,它将具有唯一的值。我正在尝试创建一个查询,在那里我们可以得到一个特定课程的最后一行,看看状态是否为2如果是,那么将1添加到@myvalue如果不是,那么将0添加到变量。我有一个id列,它是主键,没有顺序,但是我很难弄清楚这个。
myvalue是一个smallint,我们只需赋值
coursenumber是一个整数,一个表可以有许多(course)@coursenumber具有相同的数字
coursenumber和status只有一个组合。我们可以有许多课程编号相同,但每一个都有不同的状态
我想对下面的查询做的是获取@coursenumber的最后一条记录我们有一个id列,并检查@coursenumber的最后一条记录的状态是否等于2。如果等于2,则将值1赋给@myvalue;如果不等于2,则将值0赋给@myvalue。

SELECT @MyValue =(SELECT count(*) FROM MyTasks as MT WHERE MT.Course = @CourseNumber And MT.status=2)

示例:id课程状态
1 23 4
2 23 5
3 23 2
4 23 1
假设这是数据库表,course is[@coursenumber]是23。我们希望得到课程号的最后一行是[4],我们希望状态是[1],因为最后一行的状态不是2,我们只返回0,如果课程号的最后一行的状态是1,我们只返回1。这是视图内部的sql函数。我尽量省略一些可能不必要的东西,因为它是一个大视图和函数。

ojsjcaue

ojsjcaue1#

您希望自联接到表以确定查找所需记录的最大id值。你说给@myvalue加1,然后你说设置@myvalue=1。这将给@myvalue加1。如果希望@myvalue=1,请更改case语句,删除@myvalue参数。

DECLARE @MyValue INT = 0
    , @CourseNumber INT = 23

SELECT @MyValue = CASE WHEN t0.Status = 2 THEN @MyValue + 1 ELSE @MyValue END
FROM MyTasks t0 
JOIN 
( 
    SELECT Couse
        , MAX(ID) MAXID 
    FROM MyTasks 
    WHERE Course = @CourseNumber 
) t1 ON t0.Course = t1.Course AND t0.ID = t1.MAXID

相关问题