选择 SQL 语句

Posted

技术标签:

【中文标题】选择 SQL 语句【英文标题】:select SQL statement 【发布时间】:2014-11-08 16:10:23 【问题描述】:

对不起,我是 SQL Server 世界的新手

这是检查时间表

select * from CHECKINOUT where USERID= 467
 and CHECKTIME>'2014-10-24 00:00:00:000' order by CHECKTIME





  useid   checktime
    467 2014-10-24 02:18:20.000
    467 2014-10-24 17:04:43.000
    467 2014-10-25 02:31:40.000
    467 2014-10-25 17:13:38.000
    467 2014-10-25 20:59:10.000
    467 2014-10-27 17:22:06.000
    467 2014-10-28 02:55:57.000
    467 2014-10-28 17:57:12.000
    467 2014-10-29 02:36:30.000
    467 2014-10-29 17:13:35.000
    467 2014-10-30 02:35:47.000
    467 2014-10-30 17:17:56.000
    467 2014-10-31 03:02:50.000
    467 2014-10-31 17:19:18.000
    467 2014-11-01 02:42:18.000
    467 2014-11-01 17:16:14.000
    467 2014-11-02 02:44:00.000
    467 2014-11-03 17:20:10.000
    467 2014-11-04 02:38:57.000
    467 2014-11-05 02:15:50.000
    467 2014-11-05 17:14:25.000

and i need the output like



 useid      checkin                    checkout
    467     2014-10-24 17:04:43.000   2014-10-25 02:31:40.000   
    467     2014-10-27 17:22:06.000   2014-10-28 02:55:57.000   
    467     2014-10-28 17:57:12.000   2014-10-29 02:36:30.000

如果没有像 2014-11-05 17:14:25.000 这样的结帐,请将结帐空罐子寻求帮助

【问题讨论】:

您遇到的错误是什么? 您能否向我们展示一下表结构(哪些列具有哪些数据类型)和一些示例数据,然后解释您要对这些数据做什么(您要实现什么输出) 您的代码AND Checkin = DATEPART(hh,[CHECKTIME]) >= 17 中存在语法错误,这是不可能的。说明您要使用此代码实现的目标。 签入和签出不是列名,其签入时间为签入,签出时间为签出– 此日期2014-10-27 17:22:06.000 不在表格中。那它是怎么进入输出的 【参考方案1】:

不知道你的问题是什么,我认为这会得到你所需要的。

 SELECT USERID, MIN(CHECKTIME) AS Checkin, MAX(CHECKTIME) AS Checkout
 FROM checkinout
 WHERE [CHECKTIME] > '2014-10-24' 
 AND DATEPART(hh,MIN(CHECKTIME)) >= '17'
 AND DATEPART(hh,MIN(CHECKTIME)) <= '22'
 AND DATEPART(hh,MAX(CHECKTIME)) >= '17' 
 AND DATEPART(hh,MAX(CHECKTIME)) <= '22'      
 AND USERID = '467'
 ORDER BY Checkin

如果您希望它适用于所有用户,而不仅仅是 467

 SELECT USERID, MIN(CHECKTIME) AS Checkin, MAX(CHECKTIME) AS Checkout
 FROM checkinout
 WHERE [CHECKTIME] > '2014-10-24' 
 AND DATEPART(hh,MIN(CHECKTIME)) >= '17'
 AND DATEPART(hh,MIN(CHECKTIME)) <= '22'
 AND DATEPART(hh,MAX(CHECKTIME)) >= '17' 
 AND DATEPART(hh,MAX(CHECKTIME)) <= '22'      
 GROUP BY CHECKTIME, USERID
 ORDER BY Checkin

【讨论】:

min 和 max 给我同一日期的答案和这个声明,以便在 17:00:00 到 22:00:00 之间为夜班小鸡输入指纹并在下一个日期之间退房1:00:00 和 4:00:00 并且签入和签出不是列名,其签入时间为签入,签出时间为签出 即使现在第一个查询也不会编译老兄!! 在第一个查询中,选择有 3 列,其中 USERID 没有包裹在 aggregate 中,所以 group by 在哪里 @Pradeep 这张桌子是用于指纹机的,这个用户在下午 5 点到凌晨 2 点之间轮班,我需要的是签入和签出表签出,仅此而已【参考方案2】:
SELECT USERID,MIN(checktime) AS InTime,MAX(checktime) AS OutTime
    FROM checkinout
where USERID=467 and CHECKTIME>'2014-10-24 00:00:00.000'
       GROUP BY USERID,DATEDIFF(dd,0,DATEADD(hh,-4,checktime)) 
    HAVING MIN(checktime) <> MAX(checktime)
    AND MAX(DATEADD(hh,-4,checktime))-DATEDIFF(dd,0,DATEADD(hh,-4,checktime)) > '22:00' 
    ORDER BY MIN(checktime) 

【讨论】:

以上是关于选择 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章

pl/sql流程控制语句if else条件选择语句

将第一个 SQL 选择语句结果用于第二个选择语句

sql查询语句大全

访问 VBA 简单 sql 选择语句

选择 SQL 语句

SQL Server里常用的语句 有那些?按功能分