T-SQL 实现显示时间的问题,说不清楚,进来看内容

zhang1struts1yun 2010-11-25 10:50:40
用sql实现 显示的结果
例子:

员工 时间 状态 备注
张三 2010-11-24 15:30:03 登陆 。。。。。
李四 2010-11-23 14:20:10 登陆 。。。。。

只取当天最早的一条、重复的不显示,最新更新的记录要显示在最前面??????
...全文
219 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjx198934 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 zhang1struts1yun 的回复:]
还有个问题想问一下,如果昨天、前天、或者......也有记录,那该怎么一起取出来呢?
[/Quote]
如果你是要在程序中操作这些数据的话

那么很容易 建立存储过程 在程序中调用 存储过程就上我写的那个SQL
然后看这个条件DateDiff(d,getdate(),stime)=0
改成 DateDiff(d,getdate(),stime)=@num @num这个变量是通过程序调用存储过程传入的

这下在程序中你输入 0,1,2,3.....想取哪天都可以
zjx198934 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 zhang1struts1yun 的回复:]
[/Quote]

把字段换成你表对应的字段了吗?
风骚人生 2010-11-25
  • 打赏
  • 举报
回复
select 姓名,max(时间) from Test group by 姓名

时间为datetime类型
zhang1struts1yun 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zjx198934 的回复:]
引用 14 楼 zjx198934 的回复:
SQL code

selset * from table where 时间>=getdata() group by 员工 having min(时间) order by 时间 desc


补充:时间>=getdata() 这个时间精确到天就可以了!
[/Quote]

消息 8121,级别 16,状态 1,第 1 行
HAVING 子句中的列 '时间' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

[Quote=引用 20 楼 kk706 的回复:]
select name ,min(time),''
from t
group by name
having time >= convert(varchar(10),getdate(),112)
and time < dateadd(day,1,convert(varchar(10),getdate(),112));

112 还是 21 啥的记不清了,查一下吧
[/Quote]

消息 8121,级别 16,状态 1,第 1 行
HAVING 子句中的列 'time' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

baysos 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhang1struts1yun 的回复:]
用sql实现 显示的结果
例子:

员工 时间 状态 备注
张三 2010-11-24 15:30:03 登陆 。。。。。
李四 2010-11-23 14:20:10 登陆 。。。。。

只取当天最早的一条、重复的不显示,最新更新的记录要显示在最前面??????
[/Quote]
只取当天最早的一条、重复的不显示
=============================
你这么表述一般人都会误解的· “重复的不显示” 改成“重复的只显示最早的那条”……
select * from tb group by name having min(time) order by time desc 大概是这样 ,自己去改
kk706 2010-11-25
  • 打赏
  • 举报
回复
select name ,min(time),''
from t
group by name
having time >= convert(varchar(10),getdate(),112)
and time < dateadd(day,1,convert(varchar(10),getdate(),112));

112 还是 21 啥的记不清了,查一下吧
kk706 2010-11-25
  • 打赏
  • 举报
回复
select name ,min(time),''
from t
group by name
zjx198934 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zjx198934 的回复:]
SQL code

selset * from table where 时间>=getdata() group by 员工 having min(时间) order by 时间 desc
[/Quote]

补充:时间>=getdata() 这个时间精确到天就可以了!
zhang1struts1yun 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 tangjunjie1688 的回复:]
只要查当月的吗?
[/Quote]
所有的月份记录。。。
ycproc 2010-11-25
  • 打赏
  • 举报
回复


select top 1 * from Test where 姓名 in(select 姓名 from Test group by 姓名) order by 时间 desc

tangjunjie1688 2010-11-25
  • 打赏
  • 举报
回复
只要查当月的吗?
zjx198934 2010-11-25
  • 打赏
  • 举报
回复

selset * from table where 时间>=getdata() group by 员工 having min(时间) order by 时间 desc


zhang1struts1yun 2010-11-25
  • 打赏
  • 举报
回复
显示嘛,当然是所有的人,时间只取出一天当中的最早的一条记录
不知道我说的是不是很清楚,不清楚可以说出来的,没关系!!!
zhang1struts1yun 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zjx198934 的回复:]
引用 8 楼 zhang1struts1yun 的回复:
已经描述的很清楚了,可能你是不会做才。。。。。。

呵呵 我不需要跟你见识
我帮你说下你的需求:一次性取出每个员工每天最早登录的数据行 要求按时间降序排列

对比下你说的,让人理解很久都不一定体会得鸟,不要活在自己的世界里 ,既然是来请教
问题的就虚心一点,不把问题描述清楚,别人怎么帮你?
[/Quote]
-_-!!! 我不搞人身攻击,如果有什么冒犯的地方请不要见怪哈,我只是在程序的角度上考虑问题,并不是正对个人
conan1211 2010-11-25
  • 打赏
  • 举报
回复
select 姓名,max(时间) from Test
group by 姓名

至于where什么的就自己加吧
zjx198934 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhang1struts1yun 的回复:]
已经描述的很清楚了,可能你是不会做才。。。。。。
[/Quote]
呵呵 我不需要跟你见识
我帮你说下你的需求:一次性取出每个员工每天最早登录的数据行 要求按时间降序排列

对比下你说的,让人理解很久都不一定体会得鸟,不要活在自己的世界里 ,既然是来请教
问题的就虚心一点,不把问题描述清楚,别人怎么帮你?

zhang1struts1yun 2010-11-25
  • 打赏
  • 举报
回复
只给提示?能不能写个完整的代码参考一下呢
zhang1struts1yun 2010-11-25
  • 打赏
  • 举报
回复
已经描述的很清楚了,可能你是不会做才。。。。。。
zjx198934 2010-11-25
  • 打赏
  • 举报
回复
LZ没描述清楚 1.是只取同一个人的 还是所有人的
2.既然是只取最早的,为什么还要显示更新的
ycproc 2010-11-25
  • 打赏
  • 举报
回复
懂了
先用GROUP BY 对用户 分组

然后order by 根据时间 倒序 top 1
加载更多回复(18)

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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