Sql Query来查找输入的记录是否是当天的第一条记录

假设我们有一个包含UserID,Calendar日期和taskName列的表格。

请让我知道,从sql查询我们是否可以发现,对于用户标识是否是当天在表中输入的第一条记录。

2
额外 编辑
意见: 1
是为你工作吗?
额外 作者 Pranay Rana,

5 答案

统计表中的记录数

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  

if the count is > 1 than its not first record and if 1 than its first record

1
额外

您可以在这里使用 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

这是做的是分配UserID和CalendarDate的每个组合(删除时间部分)它是按日期顺序(剩余时间部分,然后任务名称)自己的增量序列。 PARTITION BY 告诉 ROW_NUMBER 函数何时从1开始(即新日期或新用户ID),然后 ORDER BY 部分告诉<�代码> ROW_NUMBER 如何排序序列。例如

1
额外
      Select count(*)  from table where userid =:userid and date =current_date

如果你想在插入之后检查输入的记录是否是第一个,或者不是在插入之前插入else之后运行。

1
额外

如果该表在同一天包含多个用户的记录,则必须忽略时间部分。

Select Count(*) From <tableName> Whre convert(Varchar,CalendarDate,111)=Convert(Varcar,GetDate(),111)
1
额外

select case when ((select count(*) from table where convert(Varchar,calendardate,111)=Convert(Varchar,GetDate(),111) and userid=(your userid))>0) then 1 else 0 end

1
额外