首页 新闻 搜索 专区 学院

如果避免显示重复数据

0
悬赏园豆:50 [已解决问题] 解决于 2008-05-26 09:43
我做了如下的一个Repeater,用于显示大量的“日期”、“名称”对应数据,因为同一天有很多的数据,我想只让这天的最后(或者最先)的一条数据显示日期,而其他的数据前都不显示日期,不知道应该如何做呢?<br><br><div class="resourceSection"> <asp:Label id="lbSectionName" runat="server"></asp:Label> <asp:Repeater id="rptSectionData" runat="server"> <HeaderTemplate> </HeaderTemplate></asp:Repeater><table class="resourceTable mceVisualAid"> <ItemTemplate> </ItemTemplate><tbody><tr class="sectionRowOdd"> <td class="mceVisualAid">&lt;%# Eval("AddTime", "{0:yyyy-MM-dd}")%&gt;</td> <td class="mceVisualAid">&lt;%# Eval("OriginName")%&gt;_&lt;%# Eval("ChineseName")%&gt;</td> </tr> <AlternatingItemTemplate> </AlternatingItemTemplate><tr class="sectionRowEven"> <td class="mceVisualAid">&lt;%# Eval("AddTime", "{0:yyyy-MM-dd}")%&gt;</td> <td class="mceVisualAid">&lt;%# Eval("OriginName")%&gt;_&lt;%# Eval("OriginName")%&gt;</td> </tr> <FooterTemplate> </FooterTemplate></tbody></table> </div>
AntiGameZ的主页 AntiGameZ | 初学一级 | 园豆:48
提问于:2008-05-23 02:39
< >
分享
最佳答案
0
这个问题可以通过写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中的。
玉开 | 大侠五级 |园豆:8822 | 2008-05-23 09:17
其他回答(3)
0
取出数据集后,在程序里重新判断一次(关键在于要显示这一天的所有数据,而只在最先或者最后的数据上加上日期),根据同一天的日期,找出最大的时分秒或者最小的,然后赋值,其他赋NULL,<%# Eval("AddTime", "{0:yyyy-MM-dd}")%>这个的得用三元运算符来判断是否调用,不过讲究效率的话就不好了 直接在REPEATER中判断做不到,
AndyFish | 园豆:1575 (小虾三级) | 2008-05-23 09:00
0
在数据库查询字段前加 DISTINCT 关键字
yeyang | 园豆:418 (菜鸟二级) | 2008-05-23 09:10
0
直接在SQL查询语句里执行比较好,全部取出后再比较,如果数据量大的话,效率太低。
李.net | 园豆:1072 (小虾三级) | 2008-05-23 09:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册