id col1 col2 .....
给2个参数 s1,s2(其中一个可能为空)
在 col1 小于 s1 或者 col2 小于 s2 的记录中取出
col1 和 col2 都是最大的一条记录
8 个解决方案
#1
select max(col1),max(col2) from a where col1<@s1 and col2<@s2
#2
select top 1 * from tb
where col1<(case when s1 is not null then s1 else col1+1 end)
and col2<(case when s2 is not null then s2 else col2+1 end)
order by col1 desc,col2 desc
两个都是最大的"一条记录"取不出来,因为我不能保证在一条记录里,它俩都是最大值.
#3
楼主把结构和数据贴出来,以及你想要的结果
#4
select * from tb
where col1<isnull(s1,col1+1) and col2<isnull(s2,col2+1)
order by col1 desc,col2 desc
#5
select max(col1),max(col2) from a
where col1<isnull(@s1,col1+1) or col2<isnull(s2,col2+1)
#6
表结构和数据
给出2个参数 分别对应 CMP_Mil 和 CMP_Time 其中一个参数可能为空(null or '')
条件1 对应的值必须比给定的参数小
条件2 在所有满足了条件1的记录中取 CMP_Mil 和CMP_Time 最大的记录
CREATE TABLE [dbo].[CarCustomMaintenanceData_tbl](
[CCMD_ID] [int] IDENTITY(1,1) NOT NULL,
[S_ID] [int] NULL,
[CM_ID] [int] NULL,
[CCDM_Name] [nvarchar](50) NULL,
[CMP_Mil] [float] NULL,
[CMP_Time] [float] NULL,
[CCMD_Time] [datetime] NULL,
[CCMD_UserID] [bigint] NULL)
SET IDENTITY_INSERT [CarCustomMaintenanceData_tbl] ON
INSERT [CarCustomMaintenanceData_tbl] ([CCMD_ID],[S_ID],[CM_ID],[CCDM_Name],[CMP_Mil],[CMP_Time]) VALUES ( 1,1,1,N'A套餐',5000,100)
INSERT [CarCustomMaintenanceData_tbl] ([CCMD_ID],[S_ID],[CM_ID],[CCDM_Name],[CMP_Mil],[CMP_Time]) VALUES ( 2,1,1,N'B套餐',10000,200)
INSERT [CarCustomMaintenanceData_tbl] ([CCMD_ID],[S_ID],[CM_ID],[CCDM_Name],[CMP_Mil],[CMP_Time]) VALUES ( 3,1,1,N'C套餐',15000,300)
INSERT [CarCustomMaintenanceData_tbl] ([CCMD_ID],[S_ID],[CM_ID],[CCDM_Name],[CMP_Mil],[CMP_Time]) VALUES ( 4,1,1,N'D套餐',20000,400)
SET IDENTITY_INSERT [CarCustomMaintenanceData_tbl] OFF
给出2个参数 分别对应 CMP_Mil 和 CMP_Time 其中一个参数可能为空(null or '')
条件1 对应的值必须比给定的参数小
条件2 在所有满足了条件1的记录中取 CMP_Mil 和CMP_Time 最大的记录
#7
条件1 对应的值中和任意一个比给定的参数小 (or关系)
#8
这个最接近 但是 如果其中一个有空的话 就错误
#1
select max(col1),max(col2) from a where col1<@s1 and col2<@s2
#2
select top 1 * from tb
where col1<(case when s1 is not null then s1 else col1+1 end)
and col2<(case when s2 is not null then s2 else col2+1 end)
order by col1 desc,col2 desc
两个都是最大的"一条记录"取不出来,因为我不能保证在一条记录里,它俩都是最大值.
#3
楼主把结构和数据贴出来,以及你想要的结果
#4
select * from tb
where col1<isnull(s1,col1+1) and col2<isnull(s2,col2+1)
order by col1 desc,col2 desc
#5
select max(col1),max(col2) from a
where col1<isnull(@s1,col1+1) or col2<isnull(s2,col2+1)
#6
表结构和数据
给出2个参数 分别对应 CMP_Mil 和 CMP_Time 其中一个参数可能为空(null or '')
条件1 对应的值必须比给定的参数小
条件2 在所有满足了条件1的记录中取 CMP_Mil 和CMP_Time 最大的记录
CREATE TABLE [dbo].[CarCustomMaintenanceData_tbl](
[CCMD_ID] [int] IDENTITY(1,1) NOT NULL,
[S_ID] [int] NULL,
[CM_ID] [int] NULL,
[CCDM_Name] [nvarchar](50) NULL,
[CMP_Mil] [float] NULL,
[CMP_Time] [float] NULL,
[CCMD_Time] [datetime] NULL,
[CCMD_UserID] [bigint] NULL)
SET IDENTITY_INSERT [CarCustomMaintenanceData_tbl] ON
INSERT [CarCustomMaintenanceData_tbl] ([CCMD_ID],[S_ID],[CM_ID],[CCDM_Name],[CMP_Mil],[CMP_Time]) VALUES ( 1,1,1,N'A套餐',5000,100)
INSERT [CarCustomMaintenanceData_tbl] ([CCMD_ID],[S_ID],[CM_ID],[CCDM_Name],[CMP_Mil],[CMP_Time]) VALUES ( 2,1,1,N'B套餐',10000,200)
INSERT [CarCustomMaintenanceData_tbl] ([CCMD_ID],[S_ID],[CM_ID],[CCDM_Name],[CMP_Mil],[CMP_Time]) VALUES ( 3,1,1,N'C套餐',15000,300)
INSERT [CarCustomMaintenanceData_tbl] ([CCMD_ID],[S_ID],[CM_ID],[CCDM_Name],[CMP_Mil],[CMP_Time]) VALUES ( 4,1,1,N'D套餐',20000,400)
SET IDENTITY_INSERT [CarCustomMaintenanceData_tbl] OFF
给出2个参数 分别对应 CMP_Mil 和 CMP_Time 其中一个参数可能为空(null or '')
条件1 对应的值必须比给定的参数小
条件2 在所有满足了条件1的记录中取 CMP_Mil 和CMP_Time 最大的记录
#7
条件1 对应的值中和任意一个比给定的参数小 (or关系)
#8
这个最接近 但是 如果其中一个有空的话 就错误