-2

假设我们有一个表,其中包含 UserID 、日历日期和 taskName 作为列。

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

4

5 回答 5

1

计算表中的记录数

declare @count int
select @count=count(*) from table where 
      convert(Varchar,CalendarDate,111)=Convert(Varcar,GetDate(),111) 
      and UserID=@userid
if @count = 1
begin
   print 'first record'
end  

如果计数 > 1 比它的第一个记录和如果 1 比它的第一个记录

于 2012-05-25T06:11:36.577 回答
1
      Select count(*)  from table where userid =:userid and date =current_date

如果您想在插入后检查输入的记录是不是首先在插入之后运行,否则在插入之前运行。

于 2012-05-25T06:12:48.180 回答
1

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

Select Count(*) From <TableName> Whre convert(Varchar,CalendarDate,111)=Convert(Varcar,GetDate(),111)
于 2012-05-25T06:13:41.147 回答
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如何对序列进行排序。例如

于 2012-05-25T06:58:43.577 回答
1

选择 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

于 2012-05-25T06:58:58.960 回答