ID、日付、および値を含むデータポイントを調べるクエリを作成しようとしています。これらのデータポイントは従業員の休暇を表します。ここで前年度データの累積合計を保持する - SQL Server
は、いくつかのサンプルデータポイント(オフ時間の要求)の例である:
+------------+-------+-------+-------------+
| Date | Value | Total | Status |
+------------+-------+-------+-------------+
| 8/20/2015 | 0.25 | 0.25 | |
| 1/11/2016 | 1 | 1.25 | |
| 5/27/2016 | 0.5 | 1.75 | |
| 8/5/2016 | 0.25 | 2 | |
| 9/13/2016 | 0 | 1.75 | |
| 9/28/2016 | 0.25 | 2 | |
| 9/29/2016 | 0.25 | 2.25 | |
| 10/17/2016 | 0 | 2.25 | |
| 10/17/2016 | 1 | 3.25 | Verbal |
| 11/17/2016 | 0.25 | 3.5 | |
| 12/1/2016 | 1 | 4.5 | Written |
| 12/2/2016 | 1 | 5.5 | Final |
| 12/6/2016 | 0.25 | 5.75 | |
| 12/14/2016 | 0.25 | 6 | Termination |
| 12/19/2016 | 0.25 | 6.25 | |
| 1/6/2017 | 0.25 | 6.5 | |
| 2/15/2017 | 0.25 | 5.75 | Final |
| 3/15/2017 | 0.25 | 6 | Termination |
| 4/17/2017 | 0.25 | 6.25 | |
| 5/8/2017 | 0 | 6.25 | |
| 5/9/2017 | 1 | 7.25 | |
| 5/21/2017 | 0.25 | 7.5 | |
| | | | |
+------------+-------+-------+-------------+
私は上記の結果を計算し、クエリを持っていると思います。合計列は、現在のデータポイント日付の1年以内の前のデータポイントの合計によって計算されます。したがって、現在のデータポイントの日付が9/29/2016の場合は、2015年9月29日〜2015年9月29日までのすべての以前のデータポイントを追加したいと考えています。
私の最終目標は、人が自分の休暇(データポイント)に基づいて昨年2回の最終的な警告を受けているかどうかを確認することです。私が提供した私の例に基づいて、2011年12月12日と2015年2月15日に発行された最終的な警告があり、それらは昨年(2011年8月21日〜2011年8月21日)に発生しました。
これを行う最善の方法は何ですか?ここで
は、私が現在持っているものです。
SELECT
a.dtmDATEAPP AS [Date],
MAX(CASE WHEN a.dtmDATEAPP = b.dtmDATEAPP THEN a.strOCCUR END) AS [Value],
SUM(b.strOCCUR) AS Total,
CASE
WHEN SUM(b.strOCCUR) >= 5 AND SUM(b.strOCCUR) < 6
THEN 'Final'
END AS [Status]
FROM
[Attendance].[dbo].[TIMEUSE] a
JOIN
[Attendance].[dbo].[TIMEUSE] b ON b.dtmDATEAPP BETWEEN DATEADD(year, -1, a.dtmDATEAPP) AND a.dtmDATEAPP
WHERE
a.lngEMPID = 1162002
AND a.Absence <> 'Scheduled'
AND b.lngEMPID = 1162002
AND b.Absence <> 'Scheduled'
GROUP BY
a.dtmDATEAPP
ORDER BY
a.dtmDATEAPP
私は従業員が昨年中に2回の最終警告を持っている場合の最適なルートを見て確認していません。
すべてのお手伝いが大変ありがとうございます。このような
これは、私のテーブルにステータスの列がないことを除いて、私が探しているものに本当に近いです。私は最終的に> 5と> 6の合計があると判断できます。これをクエリにどのように追加できますか? – Aaron
ステータスが別のテーブルから来た場合は、SELECT COUNT(*)サブクエリを変更する必要があります。合計についての基準を追加するには、最後にANDを追加し、employeeid IN(SELECT DISTINCT(employeeid)FROM cte WHERE prevYrTot> = 5) –
@Aaron自分の編集を試してください。 –