[英]Split column datetime values with into multiple columns
With a MySQL query, how can I take a table like in Example A:使用 MySQL 查询,如何获取示例 A 中的表格:
Example A示例 A
ID ![]() |
time![]() |
log_type![]() |
---|---|---|
1111 ![]() |
2021-06-01 07:13:42.000000 ![]() |
IN![]() |
1111 ![]() |
2021-06-01 17:13:42.000000 ![]() |
OUT![]() |
1111 ![]() |
2021-06-03 07:00:42.000000 ![]() |
IN![]() |
1111 ![]() |
2021-06-03 17:00:42.000000 ![]() |
OUT![]() |
2222 ![]() |
2021-06-01 07:13:42.000000 ![]() |
IN![]() |
2222 ![]() |
2021-06-01 17:13:42.000000 ![]() |
OUT![]() |
2222 ![]() |
2021-06-03 07:00:42.000000 ![]() |
IN![]() |
2222 ![]() |
2021-06-03 17:00:42.000000 ![]() |
OUT![]() |
And create a view like Example B?并创建一个类似于示例 B 的视图?
Example B示例 B
ID ![]() |
Date![]() |
IN![]() |
OUT![]() |
---|---|---|---|
1111 ![]() |
2021-06-01 ![]() |
7:13 am![]() |
4:30 pm![]() |
1111 ![]() |
2021-06-02 ![]() |
NA![]() |
NA![]() |
1111 ![]() |
2021-06-03 ![]() |
7:00 am ![]() |
4:00 pm ![]() |
2222 ![]() |
2021-06-01 ![]() |
7:13 am![]() |
4:30 pm![]() |
2222 ![]() |
2021-06-02 ![]() |
NA![]() |
NA![]() |
2222 ![]() |
2021-06-03 ![]() |
7:00 am ![]() |
4:00 pm ![]() |
WITH RECURSIVE
cte1 AS ( SELECT MIN(DATE(`time`)) `date`, MAX(DATE(`time`)) maxtime
FROM test
UNION ALL
SELECT `date` + INTERVAL 1 DAY, maxtime
FROM cte1
WHERE `date` < maxtime ),
cte2 AS ( SELECT DISTINCT id
FROM test )
SELECT cte2.id,
cte1.`date`,
COALESCE(TIME(t1.`time`), 'N/A') `IN`,
COALESCE(TIME(t2.`time`), 'N/A') `OUT`
FROM cte1
CROSS JOIN cte2
LEFT JOIN test t1 ON t1.id = cte2.id
AND cte1.`date` = DATE(t1.`time`)
AND t1.log_type = 'IN'
LEFT JOIN test t2 ON t2.id = cte2.id
AND cte1.`date` = DATE(t2.`time`)
AND t2.log_type = 'OUT'
ORDER BY 1,2
https://dbfiddle.uk/?rdbms=mariadb_10.4&fiddle=51236ef22fcaaba3f2d9af9acf7f6c55 https://dbfiddle.uk/?rdbms=mariadb_10.4&fiddle=51236ef22fcaaba3f2d9af9acf7f6c55
where do we put our variable, to return from_date to_date – Ashanti
我们将变量放在哪里,以返回 from_date to_date – Ashanti
WITH RECURSIVE
cte1 AS ( SELECT '{from_date}' `date`
UNION ALL
SELECT `date` + INTERVAL 1 DAY
FROM cte1
WHERE `date` < '{to_date}' ),
...
WITH RECURSIVE
cte1 AS ( SELECT '2022-08-17' `date`
UNION ALL
SELECT `date` + INTERVAL 1 DAY
FROM cte1
WHERE `date` < '2022-08-17'),
cte2 AS ( SELECT DISTINCT employee_name
FROM `tabEmployee Checkin` )
SELECT cte2.employee_name,
DATE_FORMAT(cte1.`date`, '%e-%b-%y'),
COALESCE(LOWER(DATE_FORMAT(t1.TIME,'%l:%i %p')), 'NA') `IN`,
COALESCE(LOWER(DATE_FORMAT(t2.TIME,'%l:%i %p')), 'NA') `OUT`
FROM cte1
CROSS JOIN cte2
LEFT JOIN `tabEmployee Checkin` t1 ON t1.employee_name = cte2.employee_name
AND cte1.`date` = DATE(t1.`time`)
AND t1.log_type = 'IN'
LEFT JOIN `tabEmployee Checkin` t2 ON t2.employee_name = cte2.employee_name
AND cte1.`date` = DATE(t2.`time`)
AND t2.log_type = 'OUT'
ORDER BY 1,2;
how to add WHERE status = Active to the above script如何将 WHERE status = Active 添加到上述脚本
Thanks谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.