马上给分:关于上万条数据按每个用户取一条最新日期记录排序,其它的排到后面,我用临时表,效率不高!

yb2008 2006-11-02 08:21:06

我想实现: 按每个用户User按最新日期取一条排到前面,剩下的数据都按日期最新的排!

产品表:

id User ProductName AddTime
1 A AAB 2006-1-1
2 A BBD 2006-1-4
3 B CCA 2006-9-8
4 B DDD 2006-8-5
5 C EEf 2006-9-5
6 C FFd ...
7 D HHd ...
8 D IId ..
9 K Jdd ..
10 L Kdd ..


感谢!我用了临时表,效率不高!!

...全文
614 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuyanbin888 2006-11-03
  • 打赏
  • 举报
回复
请教高手
我的sql数据库里面怎么没有Blob类型数据,Binary这种类型是Blob类型吗?
我先是定义了Binary这种类型,可是往里面存储二进制jpeg文件时提示错误。
不知道是怎么回事,谁能告诉我呀?谢谢!
xuyanbin888 2006-11-03
  • 打赏
  • 举报
回复
顶一下
xuyanbin888 2006-11-03
  • 打赏
  • 举报
回复
好呀
yb2008 2006-11-03
  • 打赏
  • 举报
回复
搞定了,感谢,请 hellowork(一两清风)

到此处接分:

http://community.csdn.net/Expert/topic/5130/5130667.xml?temp=7.006472E-02
yb2008 2006-11-03
  • 打赏
  • 举报
回复
幸亏有朋友顶了一下,不然我应是没办法回贴!
yb2008 2006-11-03
  • 打赏
  • 举报
回复
好的
hellowork 2006-11-03
  • 打赏
  • 举报
回复
无论以什么帐号登录,每个客户端所建立的局部临时表(以一个#开头)或表变量(以@开头)只适用于创建她的连接,其它客户端无法访问(不可见).
局部临时表的scope只与创建她的连接有关,与帐号无关,使用相同帐号的不同连接中建立的局部临时表同样是互不可见的.
moqiyayan 2006-11-03
  • 打赏
  • 举报
回复
楼主,借你宝地问个问题。
如果每个客户端都是用sa用户登录,那么在每个客户端所建立的局部临时表,是不是也都是所有用sa登录的客户端可见的?
abc_sk 2006-11-03
  • 打赏
  • 举报
回复
学习
ghtghtmalone 2006-11-03
  • 打赏
  • 举报
回复
给你个例子自己参考:
create table #tab (ICNO varchar(8) , DATE datetime, BALANCE float ,ICLINENO int )
go
insert into #tab values('0001', '2005/10/01', 100, 10)
insert into #tab values('0001' , '2005/10/02', 99, 11)
insert into #tab values('0001' , '2005/10/02', 98, 12)
insert into #tab values('0002' , '2005/10/01', 60, 30)
insert into #tab values('0003' , '2005/10/01', 60, 30)
insert into #tab values('0004' , '2005/10/02', 70, 40)
insert into #tab values('0001' , '2005/10/03', 97, 13)
insert into #tab values('0002' , '2005/10/02', 59, 31)
insert into #tab values('0001' , '2005/10/04', 96, 14)
insert into #tab values('0002' , '2005/10/02', 58, 32)
insert into #tab values('0003' , '2005/10/02', 59, 31)
insert into #tab values('0002' , '2005/10/03', 57, 33)
go

select * from #tab t
where (select count(DATE) from #tab where ICNO=t.ICNO and ICLINENO>=t.ICLINENO)<=1
order by t.ICNO,t.DATE

drop table #tab
Radar2006 2006-11-03
  • 打赏
  • 举报
回复
li_net 2006-11-03
  • 打赏
  • 举报
回复
学习
hellowork 2006-11-03
  • 打赏
  • 举报
回复
SQLSERVER中的Blob类型是image数据类型,把列的数据类型设为image就行了.
hellowork 2006-11-02
  • 打赏
  • 举报
回复
这样试试:
----创建测试数据
declare @t table(id int,[User] varchar(10),ProductName varchar(10),AddTime datetime)
insert @t
select 1, 'A', 'AAB', '2006-1-1' union all
select 2, 'A', 'BBD', '2006-1-4' union all
select 3, 'B', 'CCA', '2006-9-8' union all
select 4, 'B', 'DDD', '2006-8-5' union all
select 5, 'C', 'EEf', '2006-9-5' union all
select 7, 'C', 'EEf', '2006-9-6' union all
select 6, 'C', 'DDD', '2006-9-6'

----排序
select * from @t as a ORDER BY
case
when not exists(select 1 from @t where [User] = a.[User] and AddTime > a.AddTime)
then 0
else 1
end,
case
when a.id = (select top 1 id from @t where [User] = a.[User] and AddTime = a.AddTime)
then 0
else 1
end
,AddTime desc

/*结果
id User ProductName AddTime
-------------------------------------------------
3 B CCA 2006-09-08 00:00:00.000
7 C EEf 2006-09-06 00:00:00.000
2 A BBD 2006-01-04 00:00:00.000
6 C DDD 2006-09-06 00:00:00.000
5 C EEf 2006-09-05 00:00:00.000
4 B DDD 2006-08-05 00:00:00.000
1 A AAB 2006-01-01 00:00:00.000
*/
yb2008 2006-11-02
  • 打赏
  • 举报
回复
3 B CCA 2006-09-08 00:00:00.000
7 C EEf 2006-09-06 00:00:00.000
6 C DDD 2006-09-06 00:00:00.000
2 A BBD 2006-01-04 00:00:00.000
5 C EEf 2006-09-05 00:00:00.000
4 B DDD 2006-08-05 00:00:00.000
1 A AAB 2006-01-01 00:00:00.000
yb2008 2006-11-02
  • 打赏
  • 举报
回复
出现这种情况:


declare @t table(id int,[User] varchar(10),ProductName varchar(10),AddTime datetime)
insert @t
select 1, 'A', 'AAB', '2006-1-1' union all
select 2, 'A', 'BBD', '2006-1-4' union all
select 3, 'B', 'CCA', '2006-9-8' union all
select 4, 'B', 'DDD', '2006-8-5' union all
select 5, 'C', 'EEf', '2006-9-5' union all
select 7, 'C', 'EEf', '2006-9-6' union all
select 6, 'C', 'DDD', '2006-9-6'

----排序
select * from @t as a ORDER BY
case
when not exists(select 1 from @t where [User] = a.[User] and AddTime > a.AddTime)
then 0
else 1
end,
AddTime desc,[User]
yb2008 2006-11-02
  • 打赏
  • 举报
回复
好的
hellowork 2006-11-02
  • 打赏
  • 举报
回复
去掉日志表再试试,即去掉下面的一行:
LEFT JOIN 日志表 as c on a.[User] = c.[User]
yb2008 2006-11-02
  • 打赏
  • 举报
回复
是不是与TOP有关系?
yb2008 2006-11-02
  • 打赏
  • 举报
回复
3 B CCA 2006-9-8
11 B ddd 2006-9-8
6 C DDD 2006-9-6
2 A BBD 2006-1-4
5 C EEf 2006-9-5
4 B DDD 2006-8-5
1 A AAB 2006-1-1
加载更多回复(32)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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