结合日历信息表,分析打卡记录表attendance中的检查日期(check_date)为工作日还是非工作日,结果存为视图table1。(字段:id check_date is_work_day)
时间: 2024-02-27 11:57:14 浏览: 109
假设日历信息表为calendar,包含日期(date)和是否为工作日(is_work_day)两个字段,则可以使用以下SQL语句创建视图table1:
```sql
CREATE VIEW table1 AS
SELECT a.id, a.check_date, c.is_work_day
FROM attendance a
JOIN calendar c ON a.check_date = c.date;
```
该语句使用了JOIN操作,将attendance表和calendar表按照日期字段关联起来,从而获取每个打卡记录的日期和对应的工作日状态。最终的结果为id、check_date和is_work_day三个字段的表格,其中is_work_day字段表示该日期是否为工作日。
相关问题
结合日历信息表,分析打卡记录表attendance中的检查日期(check_date)为工作日还是非工作日,结果存为视图
假设有一个名为 `calendar` 的日历信息表格,其中包含以下列:
- `date` (日期类型):日历上的日期
- `weekday` (整数类型):对应日期的星期几,1 表示星期一,2 表示星期二,以此类推
- `is_workday` (整数类型):标记该日期是否为工作日,1 表示是,0 表示不是
假设还有一个名为 `attendance` 的打卡记录表格,其中包含以下列:
- `user_id` (整数类型):打卡用户的唯一标识符
- `check_date` (日期类型):打卡的日期
- `check_time` (时间类型):打卡的时间
- `status` (字符串类型):打卡的状态,例如签到、签退等
请编写一个 SQL 查询,从 `attendance` 表格中选出所有检查日期为工作日的打卡记录,并将结果存储为一个视图。
SQL 查询语句如下:
```sql
CREATE VIEW workday_attendance AS
SELECT * FROM attendance
WHERE check_date IN (
SELECT date FROM calendar
WHERE is_workday = 1
);
```
以上 SQL 查询语句会先从 `calendar` 表格中选出所有标记为工作日的日期,并将它们作为子查询的结果,然后再将 `attendance` 表格中检查日期为这些日期的打卡记录选出来,最后将结果存储为一个名为 `workday_attendance` 的视图。
优化下面SQL语句,在sqlserver数据库SELECT iif(start_time>(select dingding_attendance.user_check_time FROM dingding_attendance WHERE dingding_attendance.check_type='OnDuty'),start_time,(select dingding_attendance.user_check_time FROM dingding_attendance WHERE dingding_attendance.check_type='OnDuty')) as max_date from dingding_overtime LEFT JOIN dingding_attendance ON format(dingding_overtime.start_time,'yyyy-MM-dd')=format(dingding_attendance.user_check_time,'yyyy-MM-dd')
可以尝试以下SQL语句进行优化:
```
SELECT iif(o.start_time > a.user_check_time, o.start_time, a.user_check_time) as max_date
FROM dingding_overtime o
LEFT JOIN (
SELECT user_check_time
FROM dingding_attendance
WHERE check_type = 'OnDuty'
) a ON CONVERT(date, o.start_time) = CONVERT(date, a.user_check_time)
```
优化点如下:
1. 使用子查询代替了在SELECT语句中反复查询的问题,可以提高查询效率。
2. 使用CONVERT函数代替了FORMAT函数,可以提高查询效率。
3. 使用了表别名,使SQL语句更加易读易懂。
阅读全文