超期统计sql

lishery 2015-08-03 02:48:38
超期统计,一张表有字段 id,规定完成日期,实际完成日期

实际完成日期超期满一个小时算超期一天,如规定完成日期2015-01-01 10:00:00 ,实际完成日期2015-01-01 11:00:00,算超期一天;规定完成日期2015-01-01 10:00:00 ,实际完成日期2015-01-02 11:00:00,算超期二天,求sql代码
...全文
457 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-08-05
  • 打赏
  • 举报
回复
满24小时居然不多算一天。
随便你,少算一小时就好
WITH table1(id,规定完成日期,实际完成日期) AS (
SELECT 1, '2015-01-01 10:00:00', '2015-01-01 10:00:00' UNION ALL
SELECT 2, '2015-01-01 10:00:00', '2015-01-01 10:59:00' UNION ALL
SELECT 3, '2015-01-01 10:00:00', '2015-01-01 11:00:00' UNION ALL
SELECT 4, '2015-01-01 10:00:00', '2015-01-01 23:00:00' UNION ALL
SELECT 5, '2015-01-01 10:00:00', '2015-01-02 00:00:00' UNION ALL
SELECT 6, '2015-01-01 10:00:00', '2015-01-02 10:00:00' UNION ALL
SELECT 7, '2015-01-01 10:00:00', '2015-01-02 10:59:00' UNION ALL
SELECT 8, '2015-01-01 10:00:00', '2015-01-02 11:00:00'
)
SELECT *,
CASE WHEN 实际完成日期<=规定完成日期 THEN
0
ELSE
(DATEDIFF(hour,规定完成日期,实际完成日期)+23)/24
END 超期天数
FROM table1

         id 规定完成日期        实际完成日期        超期天数
----------- ------------------- ------------------- -----------
1 2015-01-01 10:00:00 2015-01-01 10:00:00 0
2 2015-01-01 10:00:00 2015-01-01 10:59:00 0
3 2015-01-01 10:00:00 2015-01-01 11:00:00 1
4 2015-01-01 10:00:00 2015-01-01 23:00:00 1
5 2015-01-01 10:00:00 2015-01-02 00:00:00 1
6 2015-01-01 10:00:00 2015-01-02 10:00:00 1
7 2015-01-01 10:00:00 2015-01-02 10:59:00 1
8 2015-01-01 10:00:00 2015-01-02 11:00:00 2
lishery 2015-08-05
  • 打赏
  • 举报
回复
引用 10 楼 Tiger_Zhao 的回复:
2015-01-02 09:00 是同一天,算1天; 2015-01-02 10:00 已经是第二天了啊,算2天没错啊。
实际完成日期超期满一个小时算超期一天 如规定完成日期2015-01-01 10:00:00 ,实际完成日期2015-01-01 11:00:00,算超期一天 规定完成日期2015-01-01 10:00:00 ,实际完成日期2015-01-02 10:30:00,算超期一天 规定完成日期2015-01-01 10:00:00 ,实际完成日期2015-01-02 11:00:00,算超期二天 除了比较日期外,时间超过一个小时候 超期+1天,不满一个小时不额外+1天
Tiger_Zhao 2015-08-05
  • 打赏
  • 举报
回复
2015-01-02 09:00 是同一天,算1天;
2015-01-02 10:00 已经是第二天了啊,算2天没错啊。
lishery 2015-08-05
  • 打赏
  • 举报
回复
引用 8 楼 Tiger_Zhao 的回复:
/* 测试数据
WITH table1(id,规定完成日期,实际完成日期) AS (
    SELECT 1, '2015-01-01 10:00:00', '2015-01-01 09:00:00' UNION ALL
    SELECT 2, '2015-01-01 10:00:00', '2015-01-01 10:00:00' UNION ALL
    SELECT 3, '2015-01-01 10:00:00', '2015-01-01 11:00:00' UNION ALL
    SELECT 4, '2015-01-01 10:00:00', '2015-01-01 23:00:00' UNION ALL
    SELECT 5, '2015-01-01 10:00:00', '2015-01-02 00:00:00' UNION ALL
    SELECT 6, '2015-01-01 10:00:00', '2015-01-02 09:00:00' UNION ALL
    SELECT 7, '2015-01-01 10:00:00', '2015-01-02 10:00:00' UNION ALL
    SELECT 8, '2015-01-01 10:00:00', '2015-01-02 11:00:00'
) */
SELECT *,
       CASE WHEN 实际完成日期<=规定完成日期 THEN
            0
       ELSE
            (DATEDIFF(hour,规定完成日期,实际完成日期)/24)+1
       END 超期天数
  FROM table1
         id 规定完成日期        实际完成日期        超期天数
----------- ------------------- ------------------- -----------
          1 2015-01-01 10:00:00 2015-01-01 09:00:00           0
          2 2015-01-01 10:00:00 2015-01-01 10:00:00           0
          3 2015-01-01 10:00:00 2015-01-01 11:00:00           1
          4 2015-01-01 10:00:00 2015-01-01 23:00:00           1
          5 2015-01-01 10:00:00 2015-01-02 00:00:00           1
          6 2015-01-01 10:00:00 2015-01-02 09:00:00           1
          7 2015-01-01 10:00:00 2015-01-02 10:00:00           2
          8 2015-01-01 10:00:00 2015-01-02 11:00:00           2
7 2015-01-01 10:00:00 2015-01-02 10:00:00 2 这条错误
lishery 2015-08-04
  • 打赏
  • 举报
回复
引用 6 楼 Landa_Ran 的回复:
这个应该可以了
select *,DATEDIFF(HOUR,[规定完成日期],[实际完成日期])/24+1
from table1
不对,,
Tiger_Zhao 2015-08-04
  • 打赏
  • 举报
回复
/* 测试数据
WITH table1(id,规定完成日期,实际完成日期) AS (
SELECT 1, '2015-01-01 10:00:00', '2015-01-01 09:00:00' UNION ALL
SELECT 2, '2015-01-01 10:00:00', '2015-01-01 10:00:00' UNION ALL
SELECT 3, '2015-01-01 10:00:00', '2015-01-01 11:00:00' UNION ALL
SELECT 4, '2015-01-01 10:00:00', '2015-01-01 23:00:00' UNION ALL
SELECT 5, '2015-01-01 10:00:00', '2015-01-02 00:00:00' UNION ALL
SELECT 6, '2015-01-01 10:00:00', '2015-01-02 09:00:00' UNION ALL
SELECT 7, '2015-01-01 10:00:00', '2015-01-02 10:00:00' UNION ALL
SELECT 8, '2015-01-01 10:00:00', '2015-01-02 11:00:00'
) */
SELECT *,
CASE WHEN 实际完成日期<=规定完成日期 THEN
0
ELSE
(DATEDIFF(hour,规定完成日期,实际完成日期)/24)+1
END 超期天数
FROM table1

         id 规定完成日期        实际完成日期        超期天数
----------- ------------------- ------------------- -----------
1 2015-01-01 10:00:00 2015-01-01 09:00:00 0
2 2015-01-01 10:00:00 2015-01-01 10:00:00 0
3 2015-01-01 10:00:00 2015-01-01 11:00:00 1
4 2015-01-01 10:00:00 2015-01-01 23:00:00 1
5 2015-01-01 10:00:00 2015-01-02 00:00:00 1
6 2015-01-01 10:00:00 2015-01-02 09:00:00 1
7 2015-01-01 10:00:00 2015-01-02 10:00:00 2
8 2015-01-01 10:00:00 2015-01-02 11:00:00 2
许晨旭 2015-08-03
  • 打赏
  • 举报
回复
这个应该可以了
select *,DATEDIFF(HOUR,[规定完成日期],[实际完成日期])/24+1
from table1
lishery 2015-08-03
  • 打赏
  • 举报
回复
引用 4 楼 yooq_csdn 的回复:
[quote=引用 3 楼 lishery 的回复:] [quote=引用 1 楼 yooq_csdn 的回复:]


select DATEDIFF(dd,DATEADD(hh,1,规定完成日期),实际完成日期)+1
from table
不超期的也限制超期一天了[/quote]

select DATEDIFF(dd,DATEADD(hh,1,规定完成日期),实际完成日期)+1
from table
where 实际完成日期>=DATEADD(hh,1,规定完成日期)
[/quote] 不超期的也要统计,显示0
yooq_csdn 2015-08-03
  • 打赏
  • 举报
回复
引用 3 楼 lishery 的回复:
[quote=引用 1 楼 yooq_csdn 的回复:]


select DATEDIFF(dd,DATEADD(hh,1,规定完成日期),实际完成日期)+1
from table
不超期的也限制超期一天了[/quote]

select DATEDIFF(dd,DATEADD(hh,1,规定完成日期),实际完成日期)+1
from table
where 实际完成日期>=DATEADD(hh,1,规定完成日期)
lishery 2015-08-03
  • 打赏
  • 举报
回复
引用 1 楼 yooq_csdn 的回复:


select DATEDIFF(dd,DATEADD(hh,1,规定完成日期),实际完成日期)+1
from table
不超期的也限制超期一天了
许晨旭 2015-08-03
  • 打赏
  • 举报
回复
select *,DATEDIFF(HOUR,[规定完成日期],[实际完成日期])
from table1
where DATEDIFF(HOUR,[规定完成日期],[实际完成日期])>1
yooq_csdn 2015-08-03
  • 打赏
  • 举报
回复


select DATEDIFF(dd,DATEADD(hh,1,规定完成日期),实际完成日期)+1
from table

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧