大神,考勤报表中,筛选最早时间的方法。

  1. SELECT * FROM dbo.[CHECKINOUT]
  2. JOIN dbo.[USERINFO] ON dbo.[CHECKINOUT].userid=dbo.[USERINFO].userid
  3. where 1=1
  4. ${if(len(name)==0,"","and dbo.[USERINFO].name like '%"+name+"%'")}
  5. ${if(len(时间)==0,"","and dbo.[USERINFO].CHECKTIME like '%"+时间+"%'")}
  6. ${if(len(开始日期)==0,"","and dbo.[CHECKINOUT].CHECKTIME between '"+开始日期+"'")}
  7. ${if(len(截止日期)==0,"","and '"+截止日期+"'")}
复制代码

现在使用的考勤,打卡会记录每次打卡的时间。如何写参数,或者其他方法,
只查询当天日期里最早的一条记录呢?
FineReporttwshe 发布于 2016-11-2 14:21
悬赏:2 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
瓦王的地狱咆哮发布于2016-11-2 14:21(编辑于 2023-9-6 09:34)
555
  • twshe twshe(提问者)

    SELECT min(dbo.[USERINFO].CHECKTIME),各字段名手动列出来 FROM dbo.[CHECKINOUT]

    红色的这段,会导致数据集的时间不显示,就会查询不了
    回复
    2016-11-02 15:23 
最佳回答
0
flyingsnake发布于2016-11-2 14:25(编辑于 2023-9-6 09:34)
555
最佳回答
0
yets11发布于2016-11-2 14:28(编辑于 2023-9-6 09:34)
555
最佳回答
0
瓦王的地狱咆哮发布于2016-11-2 14:28(编辑于 2023-9-6 09:34)
555
  • Poseidon Poseidon

    没问题啊;
    为了凑够10个字{:9_224:}
    回复
    2016-11-02 14:31 
  • twshe twshe(提问者)

    照抄这段代码。。不能查询哦
    回复
    2016-11-02 14:44 
最佳回答
0
Poseidon发布于2016-11-2 14:31(编辑于 2023-9-6 09:34)
555
  • twshe twshe(提问者)

    已经可以查询当天最早打卡的第一条记录。。

    那么如何查询,所有人员,每个人的最早的当天记录
    回复
    2016-11-02 14:49 
最佳回答
0
twshe发布于2016-11-2 14:44(编辑于 2023-9-6 09:34)
555
最佳回答
0
twshe发布于2016-11-2 14:49(编辑于 2023-9-6 09:34)
555
  • 瓦王的地狱咆哮 瓦王的地狱咆哮

    SELECT top 1 * FROM dbo.[CHECKINOUT]
    JOIN dbo.[USERINFO] ON dbo.[CHECKINOUT].userid=dbo.[USERINFO].userid
    where 1=1
    ${if(len(name)==0,\"\",\"and dbo.[USERINFO].name like \'%\"+name+\"%\'\")}
    ${if(len(时间)==0,\"\",\"and dbo.[USERINFO].CHECKTIME like \'%\"+时间+\"%\'\")}
    ${if(len(开始日期)==0,\"\",\"and dbo.[CHECKINOUT].CHECKTIME between \'\"+开始日期+\"\'\")}
    ${if(len(截止日期)==0,\"\",\"and \'\"+截止日期+\"\'\")}  group by dbo.[USERINFO].name
    order by dbo.[USERINFO].CHECKTIME asc 你试试
    回复
    2016-11-02 14:58 
最佳回答
0
瓦王的地狱咆哮发布于2016-11-2 14:52(编辑于 2023-9-6 09:34)
555
  • twshe twshe(提问者)

    最后一条代码的,字段设置错了,我改对的就可以查询了。
    但是现在使用这代码后,只能查询选择的时间范围内最早的一条记录。
    如何做到。选择时间范围的,都可以出来?
    回复
    2016-11-02 14:57 
最佳回答
0
twshe发布于2016-11-2 14:57(编辑于 2023-9-6 09:34)
555
  • 瓦王的地狱咆哮 瓦王的地狱咆哮
    不行的话,试试这个
    SELECT min(dbo.[USERINFO].CHECKTIME),各字段名手动列出来 FROM dbo.[CHECKINOUT]
    JOIN dbo.[USERINFO] ON dbo.[CHECKINOUT].userid=dbo.[USERINFO].userid
    where 1=1
    ${if(len(name)==0,\"\",\"and dbo.[USERINFO].name like \'%\"+name+\"%\'\")}
    ${if(len(时间)==0,\"\",\"and dbo.[USERINFO].CHECKTIME like \'%\"+时间+\"%\'\")}
    ${if(len(开始日期)==0,\"\",\"and dbo.[CHECKINOUT].CHECKTIME between \'\"+开始日期+\"\'\")}
    ${if(len(截止日期)==0,\"\",\"and \'\"+截止日期+\"\'\")}  group by dbo.[USERINFO].name,把提示没有包函在聚合函数中的列都加在这里

    回复
    2016-11-02 14:21 
最佳回答
0
瓦王的地狱咆哮发布于2016-11-2 14:58(编辑于 2023-9-6 09:34)
555
  • twshe twshe(提问者)

    提示这个错误呢:
    正常:错误代码:1301 数据集配置错误 Query: 选择列表中的列 \'dbo.CHECKINOUT.USERID\' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
    回复
    2016-11-02 15:01 
  • twshe twshe(提问者)
    1. SELECT min(dbo.[CHECKINOUT].CHECKTIME),dbo.[USERINFO].name,dbo.[USERINFO].userid FROM dbo.[CHECKINOUT]
    2. JOIN dbo.[USERINFO] ON dbo.[CHECKINOUT].userid=dbo.[USERINFO].userid
    3. where 1=1
    4. ${if(len(name)==0,\"\",\"and dbo.[USERINFO].name like \'%\"+name+\"%\'\")}
    5. ${if(len(开始日期)==0,\"\",\"and dbo.[CHECKINOUT].CHECKTIME between \'\"+开始日期+\"\'\")}
    6. ${if(len(截止日期)==0,\"\",\"and \'\"+截止日期+\"\'\")}  group by dbo.[USERINFO].name,dbo.[USERINFO].userid
    复制代码


    改成这样。。就可以查询所有人当天的。
    但是另一个问题又来了。
    只查一个人的时候,范围2016-10-01到2016-11-01,只能查到最早一条。。
    回复
    2016-11-02 15:32 
  • 0关注人数
  • 881浏览人数
  • 最后回答于:2017-11-19 08:34
    活动推荐 更多
    热门课程 更多
    返回顶部