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

时间:2012-05-25 06:08:28

标签: sql sql-server

假设我们有一个UserID,Calendar date和taskName作为列的表。

请告诉我,从sql Query我们是否可以找到对于用户ID而言是否是当天在表格中输入的第一条记录。

5 个答案:

答案 0 :(得分: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比第一个记录

答案 1 :(得分:1)

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

如果你想在插入之后检查输入的记录是先输入还是不输入,请在插入之前插入else后再运行。

答案 2 :(得分:1)

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

Select Count(*) From <TableName> Whre convert(Varchar,CalendarDate,111)=Convert(Varcar,GetDate(),111)

答案 3 :(得分: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如何订购序列。 e.g。

答案 4 :(得分:1)

  

选择大小时((从表中选择count(*))   哪里         转换(VARCHAR,calendardate,111)=转换(VARCHAR,GETDATE(),111)         和userid =(您的用户ID))&gt; 0)然后1其他0结束