-2

UserID、Calendar date、taskNameを列として持つテーブルがあるとします。

sql Queryから、ユーザー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-Server2008以降を使用している場合:

ROW_NUMBER() OVER(PARTITION BY UserID, CAST(CalendarDate AS DATE) ORDER  BY CalendarDate, TaskName) AS RowNumber

これが行っているのは、UserIDとCalendarDateの各組み合わせ(時間部分が削除されている)を日付順に(時間部分が残っている状態で、次にタスク名で)独自の増分シーケンスを割り当てることです。いつ1から再開するか(つまり、新しい日付または新しいユーザーID)を関数にPARTITION BY指示し、次にセクションはシーケンスの順序付け方法を指示します。例えばROW_NUMBERORDER BYROW_NUMBER

于 2012-05-25T06:58:43.577 に答える
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

于 2012-05-25T06:58:58.960 に答える