【SQLPlanet】共享单车运维团队面试题

表1:emp
在这里插入图片描述
表2:attend
在这里插入图片描述
1.上周每天分城市分职务的在岗人数和出勤率
出勤率=当天有效出勤人数/当天在岗人数
(出勤会有多次编辑,相同出勤ID按gmt_modify降序排列,取最新1条)

Sql语句:

SELECT
	e.pt,
	e.city_name,
	e.group_type,
	COUNT(e.emp_id) AS num,
	round(
		COUNT(b.id) / COUNT(e.emp_id),
		2
	) AS attend_rate
FROM
	emp AS e
LEFT JOIN (
	SELECT
		*
	FROM
		(
			SELECT
				*, row_number () over (PARTITION BY id ORDER BY gmt_modify DESC) AS sort
			FROM
				attend
			ORDER BY
				id
		) AS a
	WHERE
		a.sort = '1'
	AND a.attend_status = '1'
) AS b ON (
	DATE_FORMAT(e.pt, '%Y%m%d') = b.a_date
	AND e.emp_id = b.emp_id
	AND b.a_date BETWEEN '20210329'
	AND '20210404'
)
WHERE
	e.entry_status = '1'
GROUP BY
	e.pt,
	e.city_name,
	e.group_type;

2.找出上周连续出勤5天以上的人员ID和人员姓名,以及第5天出勤的日期(出勤会有多次编辑,按gmt_modify降序排列取最新1条记录)

Sql语句:

SELECT
	d.emp_id,
	d.emp_name,
	d.ad5
FROM
	(
		SELECT
			c.emp_id,
			c.emp_name,
			c.label_date,
			COUNT(*) AS count_day,
			DATE_ADD(c.label_date, INTERVAL 5 DAY) AS ad5
		FROM
			(
				SELECT
					*, DATE_SUB(DATE_FORMAT(b.a_date, '%Y%m%d'), INTERVAL b.rn DAY) AS label_date
				FROM
					(
						SELECT
							*, row_number () over (PARTITION BY a.emp_id ORDER BY a.a_date) AS rn
						FROM
							(
								SELECT
									*, row_number () over (PARTITION BY id ORDER BY gmt_modify DESC) AS sort
								FROM
									attend
								ORDER BY
									id
							) AS a
						WHERE
							a.sort = '1'
						AND a.attend_status = '1'
						AND a.a_date BETWEEN '20210329'
						AND '20210404'
					) AS b
			) AS c
		GROUP BY
			c.emp_id,
			c.label_date
	) AS d
WHERE
	d.count_day >= '5';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值