I've got the following sql code I've hashed together to get the output I want from my timesheet data. Not sure its the most efficient way to retrieve data this way but seems to work. The only issue I have found is that the date displayed on some of the records are a week out. So if the timesheet date was 2015-12-02, when I am calculating the date for the monday of that week, I need to subtract '-7 days' as its bringing up the date for the following monday. I was thinking of doing this with variables, but reading up sqlite doesn't support variables. Anyone advise me the best way to approach this please.
I enclose the code I have below
SELECT 'Mon' , DATE(t.date, 'weekday 1') AS myDate , tl.projectID , t.staffID , tl.mon AS hours, t.date
FROM timesheet_line AS tl
LEFT JOIN timesheet AS t ON tl.timesheetID = t.timesheetID
LEFT JOIN staff AS s ON t.staffID = s.staffID
WHERE (t.date BETWEEN '2014-03-01' AND '2015-12-01') AND (tl.mon NOT Null) AND (tl.mon <> '')
UNION ALL
SELECT 'Tues' , DATE(t.date, 'weekday 2') AS myDate , tl.projectID , t.staffID , tl.tues AS hours, t.date
FROM timesheet_line AS tl
LEFT JOIN timesheet AS t ON tl.timesheetID = t.timesheetID
LEFT JOIN staff AS s ON t.staffID = s.staffID
WHERE (t.date BETWEEN '2014-03-01' AND '2015-12-01') AND (tl.tues NOT Null) AND (tl.tues <> '')
UNION ALL
SELECT 'Wed' , DATE(t.date, 'weekday 3') AS myDate , tl.projectID , t.staffID , tl.wed AS hours, t.date
FROM timesheet_line AS tl
LEFT JOIN timesheet AS t ON tl.timesheetID = t.timesheetID
LEFT JOIN staff AS s ON t.staffID = s.staffID
WHERE (t.date BETWEEN '2014-03-01' AND '2015-12-01') AND (tl.wed NOT Null) AND (tl.wed <> '')
UNION ALL
SELECT 'Thurs' , DATE(t.date, 'weekday 4') AS myDate , tl.projectID , t.staffID , tl.thurs AS hours, t.date
FROM timesheet_line AS tl
LEFT JOIN timesheet AS t ON tl.timesheetID = t.timesheetID
LEFT JOIN staff AS s ON t.staffID = s.staffID
WHERE (t.date BETWEEN '2014-03-01' AND '2015-12-01') AND (tl.thurs NOT Null) AND (tl.thurs <> '')
UNION ALL
SELECT 'Fri' , DATE(t.date, 'weekday 5') AS myDate , tl.projectID , t.staffID , tl.fri AS hours, t.date
FROM timesheet_line AS tl
LEFT JOIN timesheet AS t ON tl.timesheetID = t.timesheetID
LEFT JOIN staff AS s ON t.staffID = s.staffID
WHERE (t.date BETWEEN '2014-03-01' AND '2015-12-01') AND (tl.fri NOT Null) AND (tl.fri <> '')
UNION ALL
SELECT 'Sat' , DATE(t.date, 'weekday 6') AS myDate , tl.projectID , t.staffID , tl.sat AS hours, t.date
FROM timesheet_line AS tl
LEFT JOIN timesheet AS t ON tl.timesheetID = t.timesheetID
LEFT JOIN staff AS s ON t.staffID = s.staffID
WHERE (t.date BETWEEN '2014-03-01' AND '2015-12-01') AND (tl.sat NOT Null) AND (tl.sat <> '')
UNION ALL
SELECT 'Sun' , DATE(t.date, 'weekday 0') AS myDate , tl.projectID , t.staffID , tl.sun AS hours, t.date
FROM timesheet_line AS tl
LEFT JOIN timesheet AS t ON tl.timesheetID = t.timesheetID
LEFT JOIN staff AS s ON t.staffID = s.staffID
WHERE (t.date BETWEEN '2014-03-01' AND '2015-12-01') AND (tl.sun NOT Null) AND (tl.sun <> '')
ORDER BY myDate ASC
Aucun commentaire:
Enregistrer un commentaire