2017-10-21 5 views
0

データ型の列がdatetimeであり、データのインポート方法は常に前日までです。ここで、列時間の午前12時から午前10時の列時間の

テーブルに履歴データが保存されていません。新しいデータをインポートする前に以前のデータが削除されます。

私はESTEndTime列がタイムスタンプ列の00:00:00とタイムスタンプ列の翌日の10:00:00の間にあるwhere節を書いておきたいと言われています。

私は検索しましたが、探しているものに固有のものは見つかりませんでした。

目的は、主に一晩中作業する人の終了時刻を取得することです。データがエクスポートされると、前日と同じように翌日、たとえば10月1日から10月2日にエクスポートされます。これにより、夜間に作業した人の最新のログアウト時刻が表示されます。私が言及した例では、データには10月1日00:00:00から10月23日59:59までのすべてが含まれます。特定の時間に制限する方法はありません。だから私が達成しようとしていたときの例を使用すると、where句では、10月1日00:00:00と10:00:00 10:00の間に制限されます。問題は、実際の私の日付はいつも変化しているので、なぜ私はここにいくつかの助けを求めているのです。

私が持っているコードが、これはあなたのために動作するかどうか期待される結果

SELECT timestamp, emp_id, dept, ESTStartTime, ESTEndTime 
    ,CONCAT(emp_id, '-', FORMAT(ESTStartTime, 'yyyy/MM/dd-HH:mm')) AS Index2Start 
    ,CONCAT(emp_id, '-', FORMAT(ESTEndTime, 'yyyy/MM/dd-HH:mm')) AS Index3Stop 
    ,CONCAT(emp_id, '-', FORMAT(ESTEndTime, 'yyyy/MM/dd')) AS Index3StopDay 

FROM   dbo.[test] 
WHERE ESTEndTime BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, timestamp), 0) + '00:00' 
      AND DATEADD(DAY, DATEDIFF(DAY, 1, timestamp), 1) + '10:00' 
ORDER BY ESTEndTime DESC 
+0

を試すことができます別の可能な方法です。 –

+0

"私のdatetime列はdatetime列の00:00:00とdatetime列の翌日の10:00:00の間にあります。それは意味をなさない。 –

+0

はい、あなたは正しいと私の意味は、私のESTEndTime列は、タイムスタンプ列の00:00:00とタイムスタンプ列の日の10:00:00の間です。 – sly123

答えて

0

はあなたがこれまでに書いたコードをしてください投稿

SELECT DISTINCT ee.* 
FROM table ee 
CROSS APPLY (
    select MIN(timestamp) AS timestamp, NextDate = DATEADD(HOUR,10,DATEADD(DAY,1,MIN(timestamp))) from table 
) maxdate 
WHERE ee.ESTEndTime BETWEEN maxdate.timestamp AND maxdate.NextDate 
+0

おかげでspittingfire。これもうまくいった。とても有難い – sly123

0

を参照してくださいになっていません。前日の日時と現在の日時を保持するために2つの変数を宣言しました。私はGETDATE()を使って現在の日時を取得しました。私はそれから日付部分を抽出し、前の日付の日を差し引いた。その後、私はVARCHARに日付を変換し、時間を追加しました。 SQL Serverは暗黙的に文字列をDATETIMEの値に戻します。ここで

--Previous day at 12:00am 
DECLARE @prevday DATETIME = CONVERT(VARCHAR,CONVERT(DATE,(DATEADD(DD,-1,GETDATE())))) + ' 12:00AM'; 
--Current day at 10:00am 
DECLARE @currentday DATETIME = CONVERT(VARCHAR,CONVERT(DATE,GETDATE())) + ' 10:00 AM' ; 

SELECT timestamp, emp_id, dept, ESTStartTime, ESTEndTime 
    ,CONCAT(emp_id, '-', FORMAT(ESTStartTime, 'yyyy/MM/dd-HH:mm')) AS Index2Start 
    ,CONCAT(emp_id, '-', FORMAT(ESTEndTime, 'yyyy/MM/dd-HH:mm')) AS Index3Stop 
    ,CONCAT(emp_id, '-', FORMAT(ESTEndTime, 'yyyy/MM/dd')) AS Index3StopDay 

FROM   dbo.[test] 
WHERE ESTEndTime BETWEEN @prevday AND @currentday 
ORDER BY ESTEndTime DESC 
+0

ありがとうございました。それが私の問題を解決しました。非常に感謝 – sly123

関連する問題