MSSQL MAX returns all results? - sql

I have tried the following query to return the highest P.Maxvalue for each ME.Name from the last day between 06:00 and 18:00:
SELECT MAX(P.MaxValue) AS Value,P.DateTime,ME.Name AS ID
FROM vManagedEntity AS ME INNER JOIN
Perf.vPerfHourly AS P ON ME.ManagedEntityRowId = P.ManagedEntityRowId INNER JOIN
vPerformanceRuleInstance AS PRI ON P.PerformanceRuleInstanceRowId = PRI.PerformanceRuleInstanceRowId INNER JOIN
vPerformanceRule AS PR ON PRI.RuleRowId = PR.RuleRowId
WHERE (ME.ManagedEntityTypeRowId = 2546) AND (pr.ObjectName = 'VMGuest-cpu') AND (pr.CounterName LIKE 'cpuUsageMHz') AND (CAST(p.DateTime as time) >= '06:00:00' AND CAST(p.DateTime as time) <='18:00:00') AND (p.DateTime > DATEADD(day, - 1, getutcdate()))
group by ME.Name,P.DateTime
ORDER by id
but it seems to return each MaxValue for each ID instead of the highest?
like:
Value DateTime ID
55 2018-02-19 12:00:00.000 bob:vm-100736
51 2018-02-19 13:00:00.000 bob:vm-100736
53 2018-02-19 14:00:00.000 bob:vm-100736
52 2018-02-19 15:00:00.000 bob:vm-100736
52 2018-02-19 16:00:00.000 bob:vm-100736
51 2018-02-19 17:00:00.000 bob:vm-100736
54 2018-02-19 18:00:00.000 bob:vm-100736
51 2018-02-20 06:00:00.000 bob:vm-100736
51 2018-02-20 07:00:00.000 bob:vm-100736
53 2018-02-20 08:00:00.000 bob:vm-100736
52 2018-02-20 09:00:00.000 bob:vm-100736
78 2018-02-19 12:00:00.000 bob:vm-101
82 2018-02-19 13:00:00.000 bob:vm-101
79 2018-02-19 14:00:00.000 bob:vm-101
78 2018-02-19 15:00:00.000 bob:vm-101
79 2018-02-19 16:00:00.000 bob:vm-101
77 2018-02-19 17:00:00.000 bob:vm-101
82 2018-02-19 18:00:00.000 bob:vm-101
82 2018-02-20 06:00:00.000 bob:vm-101
79 2018-02-20 07:00:00.000 bob:vm-101
81 2018-02-20 08:00:00.000 bob:vm-101
82 2018-02-20 09:00:00.000 bob:vm-101
155 2018-02-19 12:00:00.000 bob:vm-104432
there is one value per hour for each id hence twelve results for each id
does MAX not work in this way i want ?
Thanks
expected view like this :
Value DateTime ID
55 2018-02-19 12:00:00.000 bob:vm-100736
82 2018-02-19 13:00:00.000 bob:vm-101
etc

If you're using group by on datetime and id, you'll get all datetimes and all ids, it's that simple.
If you don't need exact time, you can group by date only:
SELECT MAX(P.MaxValue) AS Value, cast(P.DateTime as date) as dat, ME.Name AS ID
...
group by ME.Name, cast(P.DateTime as date)
Or if you do, you may use not exists clause instead of group by.

Related

Update fields in table based on previous field records

I have a table of records for pay periods with fields WeekStart and WeekEnd populated for ever fiscal year. In my application a user should be able to update the first WeekEnd date for a given fiscal year and that should in turn update subsequent records WeekStart date by adding 1 day to the Previous WeekEnd date and for the same records's WeekEnd date, add 13 days to the new WeekStart date.
This is part of a Stored Procedure written in SQL Server 2016.
UPDATE [dbo].[staffing_BiweeklyPPCopy]
SET
[WeekStart] = DATEADD(DD, 1, LAG([WeekEnd], 1) OVER (ORDER BY [ID])),
[WeekEnd] = DATEADD(DD, 14, LAG([WeekEnd], 1) OVER (ORDER BY [ID]))
WHERE
[FiscalYear] = #fiscalyear
Original Table contents shown below...
ID WeekStart WeekEnd
163 2018-10-01 2018-10-13
164 2018-10-14 2018-10-27
165 2018-10-28 2018-11-10
166 2018-11-11 2018-11-24
167 2018-11-25 2018-12-08
168 2018-12-09 2018-12-22
169 2018-12-23 2019-01-05
170 2019-01-06 2019-01-19
171 2019-01-20 2019-02-02
172 2019-02-03 2019-02-16
173 2019-02-17 2019-03-02
174 2019-03-03 2019-03-16
175 2019-03-17 2019-03-30
176 2019-03-31 2019-04-13
177 2019-04-14 2019-04-27
178 2019-04-28 2019-05-11
179 2019-05-12 2019-05-25
180 2019-05-26 2019-06-08
181 2019-06-09 2019-06-22
182 2019-06-23 2019-07-06
183 2019-07-07 2019-07-20
184 2019-07-21 2019-08-03
185 2019-08-04 2019-08-17
186 2019-08-18 2019-08-31
187 2019-09-01 2019-09-14
188 2019-09-15 2019-09-28
189 2019-09-29 2019-09-30
For example if a user updates the weekend date for record ID 163 to '2018-10-14', the table will update as follows..
ID WeekStart WeekEnd
163 2018-10-01 2018-10-14
164 2018-10-15 2018-10-28
165 2018-10-29 2018-11-11
166 2018-11-12 2018-11-25
167 2018-11-26 2018-12-09
.
.
.
189 2019-09-30 2019-09-30
Thank you in advance.

Getting a cumulative number of records within a day

I am trying to get a cumulative sum of records within a time period of a day. Below is a current sample of my data.
DT No_of_records
2017-05-01 00:00:00.000 241
2017-05-01 04:00:00.000 601
2017-05-01 08:00:00.000 207
2017-05-01 12:00:00.000 468
2017-05-01 16:00:00.000 110
2017-05-01 20:00:00.000 450
2017-05-02 00:00:00.000 151
2017-05-02 04:00:00.000 621
2017-05-02 08:00:00.000 179
2017-05-02 12:00:00.000 163
2017-05-02 16:00:00.000 579
2017-05-02 20:00:00.000 299
I am trying to sum up the number of records until the day changes in another column. My desired output is below.
DT No_of_records cumulative
2017-05-01 00:00:00.000 241 241
2017-05-01 04:00:00.000 601 842
2017-05-01 08:00:00.000 207 1049
2017-05-01 12:00:00.000 468 1517
2017-05-01 16:00:00.000 110 1627
2017-05-01 20:00:00.000 450 2077
2017-05-02 00:00:00.000 151 151
2017-05-02 04:00:00.000 621 772
2017-05-02 08:00:00.000 179 951
2017-05-02 12:00:00.000 163 1114
2017-05-02 16:00:00.000 579 1693
2017-05-02 20:00:00.000 299 1992
Do any of you have ideas on how to get the cumulative column?
If 2012+ you can use with window function sum() over
Select *
,cumulative = sum(No_of_records) over (Partition by cast(DT as date) Order by DT)
From YourTable
You can do this with a windowed SUM():
Select DT, No_of_records,
Sum(No_of_records) Over (Partition By Convert(Date, DT) Order By DT) As cumulative
From YourTable
For older version use CROSS APPLY or Correlated sub-query
SELECT DT,
No_of_records,
cs.cumulative
FROM YourTable a
CROSS apply(SELECT Sum(No_of_records)
FROM YourTable b
WHERE Cast(a.DT AS DATE) = Cast(b.DT AS DATE)
AND a.DT >= b.DT) cs (cumulative)
Rextester Demo

How to select available time and unavailable time(if atleast 30 minutes long) given a input date, room(optional)

I have a table with the following fields
ReservationID int
ReservationDateFrom datetime
ReservationDateTo datetime
ReservationRoom int
ReservationPurpose varchar
ReservationDetailsID int
I want to create an sp that selects available records and unavailable records(if atleast 30 minutes long) given Date(required), Room(optional), TimeFrom(optional), TimeTo(required if TimeFrom is not empty)
Example table
ReservationID ReservationDateFrom ReservationDateTo ReservationRoom ReservationPurpose ReservationDetailsID
3002 2017-01-02 00:00:00.000 2017-01-02 02:00:00.000 14 qweqwe 3002
3003 2017-01-02 04:00:00.000 2017-01-02 05:00:00.000 14 qweqwe 3002
3004 2017-01-02 06:00:00.000 2017-01-02 08:00:00.000 14 eqweq 3002
3005 2017-01-02 08:30:00.000 2017-01-02 09:30:00.000 14 iuyiyi 3002
3006 2017-01-02 09:50:00.000 2017-01-03 11:00:00.000 14 qweqwe 3003
Desired results to select(display unavailable and available room and range)
ReservationID ReservationDateFrom ReservationDateTo ReservationRoom ReservationPurpose ReservationDetailsID
3002 2017-01-02 00:00:00.000 2017-01-02 02:00:00.000 14 qweqwe 3002
3003 2017-01-02 04:00:00.000 2017-01-02 05:00:00.000 14 qweqwe 3002
3004 2017-01-02 06:00:00.000 2017-01-02 08:00:00.000 14 eqweq 3002
3005 2017-01-02 08:30:00.000 2017-01-02 09:30:00.000 14 iuyiyi 3002
3006 2017-01-02 09:50:00.000 2017-01-03 11:00:00.000 14 qweqwe 3003
2017-01-02 02:00:00.000 2017-01-02 04:00:00.000 14
2017-01-02 05:00:00.000 2017-01-02 06:00:00.000 14
2017-01-02 08:00:00.000 2017-01-02 08:30:00.000 14
2017-01-02 11:00:00.000 2017-01-03 24:00:00.000 14
You can add the "unreserved" records using lead() (or lag()). The basic idea is:
select ReservationID, ReservationDateFrom, ReservationDateTo, ReservationRoom
from reservations r
where . . .
union all
select NULL, ReservationDateTo,
lead(ReservationDateFrom) over (partition by ReservationRoom),
ReservationRoom
from reservations r
where . . .;
This doesn't produce exactly the output you have specified. But I am unclear where some of the logic comes from, particularly the last row.

SQL Aggregate Woes

I have this code:
SELECT q.HospitalNumber, q.Patient_Name,
q.[Date/Time]) as DATE_OF_GCS, --convert(varchar(5),q.[Date/Time],108) as TIME_OF_GCS,
max(q.[GCS_COUNT]) as BEST_GCS
From
(
Select pat.HospitalNumber, pat.FirstName + ' ' + pat.LastName as Patient_Name, ts.Time as [Date/Time], sum(pt.value) as [GCS_COUNT]
from ParametersText pt INNER JOIN TextSignals ts ON ts.TextID = pt.TextID AND ts.ParameterID = pt.ParameterID
INNER JOIN Patients pat ON pat.patientID = ts.PatientID
WHERE ts.ParameterID = 21654 or ts.ParameterID = 21655 or ts.ParameterID = 21656
GROUP BY pat.HospitalNumber, pat.FirstName, pat.LastName, ts.PatientID, ts.Time
) q
GROUP BY q.HospitalNumber, q.Patient_Name, q.[Date/Time]
--,convert(varchar(5),q.[Date/Time],108)
But all I'm after is the highest Best_GCS per day per patient, but I need the time as well. The recording of the GCS can occur many times of the day and can be the same score several times. Any help would be most appreciated...
Thanks very much in advance...
This is on SQL Server (t-sql)
Here is a snippet of the data this query throws out:
patientID Patient_Name DATE_OF_GCS GCS
442 patient name 2014-02-13 16:00:00.000 15
442 patient name 2014-02-13 18:00:00.000 15
442 patient name 2014-02-13 20:00:00.000 15
442 patient name 2014-02-14 00:00:00.000 15
442 patient name 2014-02-14 04:00:00.000 15
442 patient name 2014-02-14 05:00:00.000 15
442 patient name 2014-02-14 06:00:00.000 15
442 patient name 2014-02-14 08:00:00.000 15
442 patient name 2014-02-14 12:00:00.000 15
442 patient name 2014-02-14 16:00:00.000 15
442 patient name 2014-02-14 17:00:00.000 15
442 patient name 2014-02-14 20:00:00.000 15
442 patient name 2014-02-14 23:00:00.000 15
442 patient name 2014-02-15 00:00:00.000 15
442 patient name 2014-02-15 02:00:00.000 15
442 patient name 2014-02-15 05:00:00.000 15
442 patient name 2014-02-15 08:00:00.000 15
442 patient name 2014-02-15 12:00:00.000 15
442 patient name 2014-02-15 15:00:00.000 11
442 patient name 2014-02-15 16:00:00.000 15
442 patient name 2014-02-15 17:00:00.000 15
442 patient name 2014-02-15 18:00:00.000 15
442 patient name 2014-02-15 20:00:00.000 15
442 patient name 2014-02-16 00:00:00.000 15
442 patient name 2014-02-16 02:00:00.000 15
442 patient name 2014-02-16 05:00:00.000 15
442 patient name 2014-02-16 08:00:00.000 15
442 patient name 2014-02-16 20:00:00.000 11
442 patient name 2014-02-16 20:51:00.000 4
442 patient name 2014-02-17 01:00:00.000 15
442 patient name 2014-02-17 02:00:00.000 15
442 patient name 2014-02-17 04:00:00.000 15
442 patient name 2014-02-17 06:00:00.000 15
442 patient name 2014-02-17 08:00:00.000 15
442 patient name 2014-02-17 10:00:00.000 15
442 patient name 2014-02-17 15:00:00.000 15
442 patient name 2014-02-17 18:00:00.000 15
442 patient name 2014-02-17 20:00:00.000 15
442 patient name 2014-02-18 00:00:00.000 15
442 patient name 2014-02-18 04:00:00.000 15
442 patient name 2014-02-18 08:00:00.000 15
442 patient name 2014-02-18 12:00:00.000 15
442 patient name 2014-02-18 14:00:00.000 15
442 patient name 2014-02-18 15:00:00.000 15
442 patient name 2014-02-18 17:00:00.000 15
442 patient name 2014-02-18 19:00:00.000 15
442 patient name 2014-02-18 20:00:00.000 11
442 patient name 2014-02-19 02:00:00.000 15
442 patient name 2014-02-19 06:00:00.000 15
442 patient name 2014-02-19 09:00:00.000 15
471 patient name 2014-02-13 09:00:00.000 7
471 patient name 2014-02-13 11:00:00.000 7
471 patient name 2014-02-13 13:00:00.000 7
471 patient name 2014-02-13 15:00:00.000 8
471 patient name 2014-02-13 17:00:00.000 8
471 patient name 2014-02-13 19:00:00.000 7
471 patient name 2014-02-13 21:00:00.000 5
471 patient name 2014-02-13 22:00:00.000 5
471 patient name 2014-02-14 00:00:00.000 5
471 patient name 2014-02-14 02:00:00.000 5
471 patient name 2014-02-14 04:00:00.000 5
471 patient name 2014-02-14 06:00:00.000 5
471 patient name 2014-02-14 08:00:00.000 9
471 patient name 2014-02-14 10:00:00.000 6
471 patient name 2014-02-14 12:00:00.000 6
471 patient name 2014-02-14 14:00:00.000 8
471 patient name 2014-02-14 16:00:00.000 6
471 patient name 2014-02-14 18:00:00.000 6
471 patient name 2014-02-14 20:00:00.000 5
471 patient name 2014-02-14 22:00:00.000 6
471 patient name 2014-02-15 00:00:00.000 6
471 patient name 2014-02-15 02:00:00.000 6
471 patient name 2014-02-15 04:00:00.000 6
471 patient name 2014-02-15 06:00:00.000 6
471 patient name 2014-02-15 08:00:00.000 8
471 patient name 2014-02-15 09:00:00.000 6
471 patient name 2014-02-15 10:00:00.000 6
471 patient name 2014-02-15 11:00:00.000 3
471 patient name 2014-02-15 13:00:00.000 5
471 patient name 2014-02-15 14:00:00.000 3
471 patient name 2014-02-15 16:00:00.000 3
471 patient name 2014-02-15 18:00:00.000 3
471 patient name 2014-02-15 19:00:00.000 3
471 patient name 2014-02-15 21:00:00.000 3
471 patient name 2014-02-15 22:00:00.000 3
471 patient name 2014-02-16 00:00:00.000 3
471 patient name 2014-02-16 02:00:00.000 3
471 patient name 2014-02-16 02:30:00.000 3
471 patient name 2014-02-16 03:00:00.000 3
471 patient name 2014-02-16 06:00:00.000 3
471 patient name 2014-02-16 08:00:00.000 3
471 patient name 2014-02-16 12:00:00.000 5
471 patient name 2014-02-16 14:00:00.000 3
471 patient name 2014-02-16 18:00:00.000 3
471 patient name 2014-02-16 19:00:00.000 3
471 patient name 2014-02-16 21:00:00.000 3
472 patient name 2014-02-13 08:00:00.000 15
472 patient name 2014-02-13 12:00:00.000 15
472 patient name 2014-02-13 15:00:00.000 15
472 patient name 2014-02-13 19:00:00.000 15
472 patient name 2014-02-13 22:00:00.000 15
472 patient name 2014-02-14 03:00:00.000 15
472 patient name 2014-02-14 08:00:00.000 15
472 patient name 2014-02-14 14:00:00.000 15
472 patient name 2014-02-14 17:00:00.000 15
472 patient name 2014-02-14 19:00:00.000 15
472 patient name 2014-02-14 21:00:00.000 15
472 patient name 2014-02-14 23:00:00.000 15
472 patient name 2014-02-15 01:00:00.000 15
472 patient name 2014-02-15 05:00:00.000 14
472 patient name 2014-02-15 07:00:00.000 15
472 patient name 2014-02-15 08:00:00.000 15
472 patient name 2014-02-15 20:00:00.000 15
472 patient name 2014-02-15 22:00:00.000 15
472 patient name 2014-02-16 00:00:00.000 15
472 patient name 2014-02-16 03:00:00.000 15
472 patient name 2014-02-16 05:00:00.000 15
472 patient name 2014-02-16 07:00:00.000 15
472 patient name 2014-02-16 09:00:00.000 15
472 patient name 2014-02-16 12:00:00.000 15
472 patient name 2014-02-16 15:00:00.000 15
472 patient name 2014-02-16 18:00:00.000 15
472 patient name 2014-02-16 20:00:00.000 15
472 patient name 2014-02-16 22:00:00.000 15
472 patient name 2014-02-17 00:00:00.000 15
472 patient name 2014-02-17 02:00:00.000 15
472 patient name 2014-02-17 04:00:00.000 15
I figured it out. Thanks Anyway..
Here's the code. If there's any way it could be better, I'd love to hear it:
With t as
(
SELECT q.HospitalNumber, q.Patient_Name,
q.[Date/Time] as DATE_OF_GCS,
max(q.[GCS_COUNT]) as BEST_GCS
From
(
Select pat.HospitalNumber, pat.FirstName + ' ' + pat.LastName as Patient_Name, ts.Time as [Date/Time], sum(pt.value) as [GCS_COUNT]
from ParametersText pt INNER JOIN TextSignals ts ON ts.TextID = pt.TextID AND ts.ParameterID = pt.ParameterID
INNER JOIN Patients pat ON pat.patientID = ts.PatientID
WHERE ts.ParameterID = 21654 or ts.ParameterID = 21655 or ts.ParameterID = 21656
GROUP BY pat.HospitalNumber, pat.FirstName, pat.LastName, ts.PatientID, ts.Time
) q
GROUP BY q.HospitalNumber, q.Patient_Name, q.[Date/Time]
)
Select hospitalnumber, Date_Of_GCS, Best_GCS
FROM (
select t.hospitalnumber, t.Date_Of_GCS, t.Best_GCS, ROW_NUMBER() over (partition by t.hospitalnumber, cast(t.Date_Of_GCS as date) order by t.Best_GCS Desc ) as GCS
FROM t ) as p
where gcs = 1
Order By hospitalnumber, Date_Of_GCS

SQL to Find records where result is in range between two columns, but check multiple rows

I'm working with two datasets, one is a more detailed view of clock punch activity, and another is a summation of entire "shifts" that these clock punches make up. What we are trying to accomplish, is to return a record where the PAYCODEID is equal to '7' or '8' (these are meal break codes), and if it falls within the range of the last two columns in the entire shift table just below:
ClockEventShifts:
ShiftID EMPID Clockin MealRangeMax
1 00001280687 2014-02-16 08:00:00.000 2014-02-16 14:00:00.000
6 00001280687 2014-02-17 16:00:00.000 2014-02-17 22:00:00.000
There are a few key possibilities for the more detailed view of clock punches:
ClockEvent A:
EVENTID EMPID CLOCKIN CLOCKOUT PAYCODEID
228 00001280687 2014-02-16 08:00:00.000 2014-02-16 12:00:00.000 20
234 00001280687 2014-02-16 12:00:00.000 2014-02-16 13:00:00.000 8
235 00001280687 2014-02-16 13:00:00.000 2014-02-16 16:00:00.000 20
237 00001280687 2014-02-16 16:00:00.000 2014-02-16 17:01:00.000 21
238 00001280687 2014-02-16 17:01:00.000 2014-02-16 18:00:00.000 20
236 00001280687 2014-02-17 16:00:00.000 2014-02-17 17:00:00.000 20
ClockEvent B:
EVENTID EMPID CLOCKIN CLOCKOUT PAYCODEID
228 00001280687 2014-02-16 08:00:00.000 2014-02-16 12:00:00.000 20
234 00001280687 2014-02-16 12:00:00.000 2014-02-16 13:00:00.000 21
235 00001280687 2014-02-16 13:00:00.000 2014-02-16 16:00:00.000 20
237 00001280687 2014-02-16 16:00:00.000 2014-02-16 17:01:00.000 8
238 00001280687 2014-02-16 17:01:00.000 2014-02-16 18:00:00.000 20
236 00001280687 2014-02-17 16:00:00.000 2014-02-17 17:00:00.000 20
ClockEvent C:
EVENTID EMPID CLOCKIN CLOCKOUT PAYCODEID
228 00001280687 2014-02-16 08:00:00.000 2014-02-16 12:00:00.000 20
234 00001280687 2014-02-16 12:00:00.000 2014-02-16 13:00:00.000 21
235 00001280687 2014-02-16 13:00:00.000 2014-02-16 16:00:00.000 20
237 00001280687 2014-02-16 16:00:00.000 2014-02-16 17:01:00.000 21
238 00001280687 2014-02-16 17:01:00.000 2014-02-16 18:00:00.000 20
236 00001280687 2014-02-17 16:00:00.000 2014-02-17 17:00:00.000 20
ClockEvent D:
EVENTID EMPID CLOCKIN CLOCKOUT PAYCODEID
228 00001280687 2014-02-16 08:00:00.000 2014-02-16 12:00:00.000 20
234 00001280687 2014-02-16 12:00:00.000 2014-02-16 13:00:00.000 8
235 00001280687 2014-02-16 13:00:00.000 2014-02-16 16:00:00.000 20
237 00001280687 2014-02-16 16:00:00.000 2014-02-16 17:01:00.000 8
238 00001280687 2014-02-16 17:01:00.000 2014-02-16 18:00:00.000 20
236 00001280687 2014-02-17 16:00:00.000 2014-02-17 17:00:00.000 20
ClockEvent E:
EVENTID EMPID CLOCKIN CLOCKOUT PAYCODEID
228 00001280687 2014-02-16 08:00:00.000 2014-02-16 12:00:00.000 8
234 00001280687 2014-02-16 12:00:00.000 2014-02-16 13:00:00.000 21
235 00001280687 2014-02-16 13:00:00.000 2014-02-16 16:00:00.000 8
237 00001280687 2014-02-16 16:00:00.000 2014-02-16 17:01:00.000 21
238 00001280687 2014-02-16 17:01:00.000 2014-02-16 18:00:00.000 20
236 00001280687 2014-02-17 16:00:00.000 2014-02-17 17:00:00.000 20
Ideally, a perfect query/sproc could return the following in each scenario, checking for punches 360 minutes out:
A:
EVENTID EMPID CLOCKIN CLOCKOUT PAYCODEID
234 00001280687 2014-02-16 12:00:00.000 2014-02-16 13:00:00.000 8
B:
Nada!
C:
Nada!
D:
EVENTID EMPID CLOCKIN CLOCKOUT PAYCODEID
234 00001280687 2014-02-16 12:00:00.000 2014-02-16 13:00:00.000 8
E (it could return multiples too, but I really only care about the existence of at least one meal before 6 hours):
EVENTID EMPID CLOCKIN CLOCKOUT PAYCODEID
228 00001280687 2014-02-16 08:00:00.000 2014-02-16 12:00:00.000 8
It could also do something like this, ignoring that MealRangeMax piece and just using Clockin from ClockEventShifts:
A:
MINUTE_DIFFERENCE
240
B:
MINUTE_DIFFERENCE
600
C:
MINUTE_DIFFERENCE
NULL
D:
MINUTE_DIFFERENCE
240
600 (optional)
E:
MINUTE_DIFFERENCE
0
300 (optional)
I would tend to use something like IN or BETWEEN for such things, but IN can't check the values between things though to my knowledge, and BETWEEN can only check against an X and Y value to my knowledge, but I need to continue those BETWEEN checks for the rest of the result set from ClockEventShifts. I'm still searching for some solutions, but this seems to be slightly more complex.
Does anyone have any advice or ideas in approaching this problem?
This sql statement will give you records from CLOCKEVENT where the paycode is 7 or 8 and the event occurs within ClockEventShifts clockin time and mealrangemax.
SELECT ce.*
FROM ClockEvent ce
, ClockEventShifts ces
WHERE ce.PAYCODEID IN(7, 8)
AND ce.EMPID = ces.EMPID
AND ce.CLOCKIN >= ces.CLOCKIN
AND ce.CLOCKOUT <= ces.MealRangeMax
If you only care about the ClockIn time being within the ClockEventShift range of time, you could use this:
SELECT ce.*
FROM ClockEvent ce
, ClockEventShifts ces
WHERE ce.PAYCODEID IN(7, 8)
AND ce.EMPID = ces.EMPID
AND ce.CLOCKIN BETWEEN ces.CLOCKIN AND ces.MealRangeMax