我必须具有相同结构的表2。我已经通过使用以下查询使用一个表来获得结果
SELECT *,COUNT(Time),
CASE WHEN COUNT(Time) = 1
THEN CASE WHEN Time > '00:00:00' && Time <= '12:15:00'
THEN Time END ELSE MIN(Time)
END as time_in,
CASE WHEN COUNT(Time) = 1
THEN CASE WHEN Time > '12:15:00' && Time <= '23:59:59'
THEN Time END ELSE NULLIF(MAX(Time), MIN(Time))
END as time_out
FROM attendancedata
INNER JOIN nonacadamic
ON attendancedata.EnrolledID = nonacadamic.emp_id
WHERE nonacadamic.emp_id = '".$_POST["emp_id"]."' AND Date LIKE '$currentMonth%'
GROUP BY EnrolledID,Date
此查询将在时间上分为2部分(时间和超时)。它工作正常。现在也要从花药表中获取数据。它也具有相同的结构attendancedata
表。
出勤数据表结构
EnrolledID Date Time
23 2019-09-09 16:19:00
53 2019-08-27 08:19:00
tempattendancedata表结构
EnrolledID Date Time
23 2019-09-09 16:19:00
23 2019-09-20 08:19:00
我想获得结果,请考虑以上表格记录,然后将时间分成两个部分。我该如何执行此任务? 实际要求是tempattendancedata表数据也需要考虑时间分割
UNION ALL
包含临时表的结果,然后将其放入subquery
语句的select case
中SELECT * *,COUNT(Time)
,CASE WHEN COUNT(Time) = 1 THEN
CASE WHEN Time > '00:00:00' && Time <= '12:15:00'
THEN Time END ELSE MIN(Time)
END as time_in,
CASE WHEN COUNT(Time) = 1 THEN
CASE WHEN Time > '12:15:00' && Time <= '23:59:59'
THEN Time END ELSE NULLIF(MAX(Time), MIN(Time))
END as time_out
FROM
(SELECT *
FROM attendancedata
INNER JOIN nonacadamic
ON attendancedata.EnrolledID = nonacadamic.emp_id
WHERE nonacadamic.emp_id = '".$_POST["emp_id"]."' AND Date LIKE '$currentMonth%'
UNION ALL
SELECT *
FROM tempattendancedata
INNER JOIN nonacadamic
ON attendancedata.EnrolledID = nonacadamic.emp_id
WHERE nonacadamic.emp_id = '".$_POST["emp_id"]."' AND Date LIKE '$currentMonth%') t1
GROUP BY t1.EnrolledID, t1.Date
http://www.mysqltutorial.org/sql-union-mysql.aspx
SELECT id
FROM t1
UNION
SELECT id
FROM t2;
所以您的查询将类似于...
SELECT *,COUNT(Time), CASE WHEN COUNT(Time) = 1 THEN CASE WHEN Time > '00:00:00' && Time <= '12:15:00' THEN Time END ELSE MIN(Time) END as time_in, CASE WHEN COUNT(Time) = 1 THEN CASE WHEN Time > '12:15:00' && Time <= '23:59:59' THEN Time END ELSE NULLIF(MAX(Time), MIN(Time)) END as time_out FROM attendancedata INNER JOIN nonacadamic ON attendancedata.EnrolledID = nonacadamic.emp_id WHERE nonacadamic.emp_id = '".$_POST["emp_id"]."' AND Date LIKE '$currentMonth%' GROUP BY EnrolledID,Date UNION SELECT *,COUNT(Time), CASE WHEN COUNT(Time) = 1 THEN CASE WHEN Time > '00:00:00' && Time <= '12:15:00' THEN Time END ELSE MIN(Time) END as time_in, CASE WHEN COUNT(Time) = 1 THEN CASE WHEN Time > '12:15:00' && Time <= '23:59:59' THEN Time END ELSE NULLIF(MAX(Time), MIN(Time)) END as time_out FROM tempattendancedata INNER JOIN nonacadamic ON tempattendancedata .EnrolledID = nonacadamic.emp_id WHERE nonacadamic.emp_id = '".$_POST["emp_id"]."' AND Date LIKE '$currentMonth%' GROUP BY EnrolledID,Date