UserID、Calendar date、taskNameを列として持つテーブルがあるとします。
sql Queryから、ユーザーIDについて、その日にテーブルに入力された最初のレコードであることがわかるかどうかをお知らせください。
UserID、Calendar date、taskNameを列として持つテーブルがあるとします。
sql Queryから、ユーザーIDについて、その日にテーブルに入力された最初のレコードであることがわかるかどうかをお知らせください。
テーブル内のレコード数をカウントします
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の場合
Select count(*) from table where userid =:userid and date =current_date
入力したレコードが最初であるかどうかを挿入後に確認する場合は、挿入後にこれを実行するか、挿入する前に実行してください。
テーブルに同じ日のユーザーの複数のレコードが含まれている場合は、時間の部分を無視する必要があります。
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-Server2008以降を使用している場合:
ROW_NUMBER() OVER(PARTITION BY UserID, CAST(CalendarDate AS DATE) ORDER BY CalendarDate, TaskName) AS RowNumber
これが行っているのは、UserIDとCalendarDateの各組み合わせ(時間部分が削除されている)を日付順に(時間部分が残っている状態で、次にタスク名で)独自の増分シーケンスを割り当てることです。いつ1から再開するか(つまり、新しい日付または新しいユーザーID)を関数にPARTITION BY
指示し、次にセクションはシーケンスの順序付け方法を指示します。例えばROW_NUMBER
ORDER BY
ROW_NUMBER
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