gpt4 book ai didi

Mysql查询将两个条件合并为一行

转载 作者:行者123 更新时间:2023-11-28 23:17:32 26 4
gpt4 key购买 nike

我只是感到困惑。已经尝试搜索整个网站或谷歌,但没有找到“最近”的解决方案。

好吧,假设我有这个表结构。

id date       finger_id finger_time is_enter
1 2017-03-30 2 09:00 1
2 2017-03-30 2 17:13 0
3 2017-03-31 4 09:10 1
4 2017-03-31 3 09:01 1
5. 2017-03-31 3 17:00 0

我想让表格像下面这样。

date       finger_id  enter_time  exit_time
2017-03-30 2 09:00 17:13
2017-03-30 4 09:10
2017-03-31 3 09:10 17:00

我做了sql语句,结果变成这样

date       finger_id  enter_time   exit_time
2017-03-30 2 09:00
2017-03-30 2 17:13
2017-03-31 4 09:10
2017-03-31 3 09:01
2017-03-31 3 17:00

我只想知道如何通过 finger_id 列在同一日期合并 is_enter 1 和 is_enter 0。

这是我的 sql 查询以供引用。

SELECT * 
FROM `tbl_fingerprint`
LEFT JOIN `tbl_employee` ON `tbl_employee`.`fingerprint_id`=`tbl_fingerprint`.`fingerprint_id`
LEFT JOIN `tbl_position` ON `tbl_position`.`position_id`=`tbl_employee`.`position_id`
WHERE `fingerprint_date` >= '2017-03-01'
AND `fingerprint_date` <= '2017-04-01'
GROUP BY `tbl_fingerprint`.`fingerprint_id`,
`tbl_fingerprint`.`fingerprint_date`,
`tbl_fingerprint`.`is_enter`
ORDER BY `fingerprint_date` ASC LIMIT 30

感谢您的帮助。

最佳答案

你可以做一个 group by datefinger_id 字段并使用条件表达式(caseif()) 在聚合函数中以获得预期的结果。聚合函数中的条件语句确保只有在 is_enter 字段中设置了正确的值时它们才会返回值。我省略了员工详细信息,因为这些不构成您问题的一部分:

SELECT date, fingerprint_id, max(if(is_enter=1,finger_time,null) as enter_time, max(if(is_enter=0,finger_time,null) as exit_time
FROM `tbl_fingerprint`
WHERE `fingerprint_date` >= '2017-03-01'
AND `fingerprint_date` <= '2017-04-01'
GROUP BY `tbl_fingerprint`.`fingerprint_id`,
`tbl_fingerprint`.`fingerprint_date`,
ORDER BY `fingerprint_date` ASC LIMIT 30

关于Mysql查询将两个条件合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43179646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com