我已经将以下 sql 代码散列在一起,以从我的时间表数据中获得我想要的输出。不确定这是以这种方式检索数据的最有效方法,但似乎可行。我发现的唯一问题是某些记录上显示的日期是一周后。因此,如果时间表日期是 2015 年 12 月 2 日,当我计算该周星期一的日期时,我需要减去“-7 天”作为下一个星期一的日期。我正在考虑用变量来做这件事,但是阅读 sqlite 不支持变量。请任何人告诉我解决这个问题的最佳方法。
我附上我在下面的代码
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