假设我们有一个以UserID,Calendar date和taskName为列的表。Sql Query查找当天输入的记录是否是第一条记录
请让我知道,从sql查询我们是否可以发现,对于一个用户id是它在当天输入的第一条记录与否。记录的数量的表格
假设我们有一个以UserID,Calendar date和taskName为列的表。Sql Query查找当天输入的记录是否是第一条记录
请让我知道,从sql查询我们是否可以发现,对于一个用户id是它在当天输入的第一条记录与否。记录的数量的表格
选择情况下((SELECT COUNT(*)from表 其中 转换(VARCHAR,calendardate,111)=转换(VARCHAR,GETDATE(),111) 和用户ID =(你的用户ID))> 0)then 1 else 0 end
制作计数
declare @count int
select @count=count(*) from table where
convert(Varchar,CalendarDate,111)=Convert(Varcar,GetDate(),111)
and [email protected]
if @count = 1
begin
print 'first record'
end
如果计数> 1比它不是第一条记录,如果1比第一记录
Select count(*) from table where userid =:userid and date =current_date
如果你想后检查插入输入的记录是第一个还是不是在插入之前插入else之后运行。
如果表格在同一天包含多个用户记录,则必须忽略时间部分。
Select Count(*) From <TableName> Whre convert(Varchar,CalendarDate,111)=Convert(Varcar,GetDate(),111)
您可以在此处使用窗口功能ROW_NUMBER()。
SELECT UserID,
CalendarDate,
TaskName,
ROW_NUMBER() OVER(PARTITION BY UserID, DATEADD(DAY, 0, DATEDIFF(DAY, 0, CalendarDate)) ORDER BY CalendarDate, TaskName) AS RowNumber
FROM T
或者,如果您有SQL-Server 2008或更高版本:
ROW_NUMBER() OVER(PARTITION BY UserID, CAST(CalendarDate AS DATE) ORDER BY CalendarDate, TaskName) AS RowNumber
这是什么东西做的是分配的用户ID和CalendarDate的每个组合(删除时间部分),它自己的递增序列顺序的日期(剩余时间部分,然后是任务名称)。 PARTITION BY
告诉ROW_NUMBER
函数何时从1开始(即新的日期或新的用户ID),那么ORDER BY
部分告诉ROW_NUMBER
如何排序序列。例如
是为你工作吗? –