写一个sql 语句,将考勤记录里面同一天的数据只保留一个最早的,然后统计一个月考勤记录了多少天
时间: 2024-02-23 10:00:03 浏览: 48
假设考勤记录表为attendance,包含以下字段:id, employee_id, date, time。
可以使用以下 SQL 语句实现按天去重,并统计一个月内考勤记录的天数:
```sql
SELECT COUNT(DISTINCT date) AS days
FROM (
SELECT MIN(time) AS time, DATE(date) AS date
FROM attendance
GROUP BY DATE(date)
) AS t
WHERE MONTH(t.date) = MONTH(NOW())
```
这个 SQL 语句首先使用 GROUP BY 按日期分组,然后使用 MIN 函数获取每一天的最早打卡时间。接着使用子查询将结果再按日期分组,最后使用 COUNT(DISTINCT) 统计出一个月内的考勤天数。
相关问题
帮我写一个sql 查询某个人连续10个月的考勤记录
好的,以下是查询某个人连续10个月的考勤记录的SQL语句:
SELECT *
FROM attendance
WHERE employee_id = '某个人的ID'
AND date BETWEEN DATEADD(month, -9, GETDATE()) AND GETDATE()
GROUP BY date
HAVING COUNT(*) >= 10;
希望对你有所帮助。
大佬们,我这边用sql server存储考勤数据,现在我怕数据丢失想做一个监控数据的这个一个动作,并配置邮件或者短信报警。 先在数据库内自动执行sql语句查询一段时间内的结果,如没有查询到数据,zabbix执行报警动作,这可行吗?
可以实现你的需求,具体步骤如下:
1. 在 SQL Server 中创建一个 SQL 代理作业,该作业包含你要执行的查询语句。可以使用 SQL Server Management Studio 来创建代理作业。
2. 在 Zabbix 中创建一个监控项,该监控项的类型为“External check”,并将其命名为“SQL Job Status”。
3. 编写一个 PowerShell 脚本,用于检查 SQL 代理作业的运行状态,并将结果返回给 Zabbix。脚本内容如下:
```
$jobName = "Your SQL Job Name"
$serverName = "Your SQL Server Name"
$jobStatus = (Invoke-Sqlcmd -ServerInstance $serverName -Query "exec msdb..sp_help_job @job_name='$jobName'" | Select-Object -ExpandProperty current_execution_status)
if ($jobStatus -eq 1) {
Write-Output "1"
} else {
Write-Output "0"
}
```
4. 将 PowerShell 脚本保存在 Zabbix Server 的某个目录下,例如“C:\Monitoring\Scripts”。
5. 在 Zabbix 中创建一个动作,该动作的类型为“Remote command”,并将其命名为“SQL Job Failure Alert”。
6. 在动作的“Operations”选项卡中,添加一个操作,该操作的类型为“Remote command”,并在“Command”字段中输入以下命令:
```
powershell.exe -ExecutionPolicy Bypass -File "C:\Monitoring\Scripts\sql_job_check.ps1"
```
7. 在动作的“Conditions”选项卡中,添加一个条件,该条件的类型为“Trigger”,并选择“SQL Job Status”监控项。
8. 在条件的“Expression”字段中输入以下表达式:
```
{SQL Job Status.last()}=0
```
9. 在条件的“Recovery operations”字段中,添加一个操作,该操作的类型为“Remote command”,并在“Command”字段中输入以下命令:
```
echo "SQL Job has recovered" | sendmail -t your@email.com
```
10. 保存并测试你的 Zabbix 配置。
此时,你的 Zabbix 服务器将定期执行 PowerShell 脚本来检查 SQL Server 中的代理作业是否正在运行。如果代理作业失败,Zabbix 将通过电子邮件发送警报。如果代理作业恢复正常,Zabbix 将再次发送电子邮件,提示代理作业已恢复。
阅读全文