[已解决问题] 如果避免显示重复数据
提问时间: 2008-05-23 02:39
悬赏分:50 浏览:333 次
我做了如下的一个Repeater,用于显示大量的“日期”、“名称”对应数据,因为同一天有很多的数据,我想只让这天的最后(或者最先)的一条数据显示日期,而其他的数据前都不显示日期,不知道应该如何做呢?

<%# Eval("AddTime", "{0:yyyy-MM-dd}")%> <%# Eval("OriginName")%>_<%# Eval("ChineseName")%>
<%# Eval("AddTime", "{0:yyyy-MM-dd}")%> <%# Eval("OriginName")%>_<%# Eval("OriginName")%>
提问者:AntiGameZ - 初学一级
最佳答案
这个问题可以通过写sql解决,我给你提供一种sql2005下的一种写法。 假定你有一张表TA,有三个字段ID,AddTime,OriginName [code] if object_id('ta','U') is not null drop table ta; go create table ta( id int identity(1,1) not null , OriginName nvarchar(100) not null, AddTime datetime not null ) go insert into ta values('A','2008-05-01 10:10:11'); insert into ta values('B','2008-05-01 20:10:11'); insert into ta values('C','2008-05-02 09:10:11'); insert into ta values('D','2008-05-02 15:10:11'); insert into ta values('E','2008-05-03 11:10:11'); Go with ta_temp as( select id, originName,AddTime, datePartOfAddTime = cast(year(AddTime) as char(4)) + '-' + cast(month(AddTime) as char(2)) + '-' + cast(day(AddTime) as char(2)) FROM ta ), ta_temp_rn as( SELECT id,originName,AddTime,datePartOfAddTime, rn = ROW_NUMBER() OVER (PARTITION BY datePartOfAddTime ORDER BY AddTime DESC) FROM ta_temp ) SELECT id,originName,AddTime FROM ta_temp_rn WHERE rn = 1 [/code] 以上脚本已测试通过,取每天的第一条,或者最后一条,只需修改 [code] ROW_NUMBER() OVER (PARTITION BY datePartOfAddTime ORDER BY AddTime DESC) [/code] 中的ORDER BY AddTime DESC 或者ASC即可。 sql 2000中写法如下: [code] select ta.* from ta inner join ( select maxAddTime = max(AddTime), datePartOfAddTime = cast(year(AddTime) as char(4)) + '-' + cast(month(AddTime) as char(2)) + '-' + cast(day(AddTime) as char(2)) FROM ta group by cast(year(AddTime) as char(4)) + '-' + cast(month(AddTime) as char(2)) + '-' + cast(day(AddTime) as char(2)) ) temp on ta.addtime = temp.maxAddTime [/code] 2000中写法的效率肯定要低于2005中的。
2008/5/23 9:17:48 回答者:玉开
其它回答(3)
取出数据集后,在程序里重新判断一次(关键在于要显示这一天的所有数据,而只在最先或者最后的数据上加上日期),根据同一天的日期,找出最大的时分秒或者最小的,然后赋值,其他赋NULL,<%# Eval("AddTime", "{0:yyyy-MM-dd}")%>这个的得用三元运算符来判断是否调用,不过讲究效率的话就不好了 直接在REPEATER中判断做不到,
4个月前   回答者:AndyFish - 小虾三级
在数据库查询字段前加 DISTINCT 关键字
4个月前   回答者:yeyang - 菜鸟二级
直接在SQL查询语句里执行比较好,全部取出后再比较,如果数据量大的话,效率太低。
4个月前   回答者:李.net - 小虾三级
评论
4个月前   玉开 :
有关WITH tbl AS CTE表达式请参考
http://www.cnblogs.com/yukaizhao/archive/2008/04/29/cte_sql.html

有关sql 2005中的排名函数请参考
http://www.cnblogs.com/yukaizhao/archive/2008/04/28/sql_server_feature_rank_function.html
4个月前   AntiGameZ :
谢谢诸位弟兄,规矩玉开兄的讲解,已经解决了问题。
   您需要登录以后才能回答!
 

我要提问

我的问题


快到期问题

> 问题排行榜

相关内容

相关链接