sql 排序问题,急!

linsx1987 2011-06-18 04:16:03
数据量比较大,想实现结果:

张三 2011-6-18 .....(后面字段省略)
李四 2011-6-18 .....
小五 2011-6-17 .....

张三 2011-6-17 .....
李四 2011-6-17 .....
小五 2011-6-16 .....

...
...
...

对于group by有点郁闷,因为字段很多,难道要全部都弄出来。不是特别懂。

求救!!急呢,如果再弄不出,我就要滚蛋了
...全文
214 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhonghua0319 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 linsx1987 的回复:]
引用 6 楼 zhonghua0319 的回复:
你可以再试试这个sql,不行的话,把结果贴贴出来.
select * from datable
group by 时间字段,名字字段
order by 时间字段 desc
只要不在group by后的字段查询出来的字段要有聚合函数如max(字段名)

你这样子好像是不行的,报错。
选择列表中的列 'id' 无效,因为该列没有包含在聚……
[/Quote]
没有用到聚合函数的字段你都可以写到group by后面去,反正group by分组会按你考前的字段为主的如:
select * from datable
group by 时间字段,名字字段,id字段,。。。。
order by 时间字段 desc
kyolxs 2011-06-19
  • 打赏
  • 举报
回复
qgqch2008 2011-06-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 linsx1987 的回复:]

表里的数据是这样的:
张三 2011-6-18 00:00:01.....(后面字段省略)
张三 2011-6-18 00:00:02

李四 2011-6-18 00:00:20.....
李四 2011-6-18 00:00:40.....

小五 2011-6-18 00:02:20.....
小五 2011-6-18 00:04:20.....

张三 2011-6-……
[/Quote]
CREATE TABLE tbtmp([name] VARCHAR(10),[time] VARCHAR(40))
INSERT dbo.tbtmp
SELECT '张三', '2011-6-18 00:00:01.....' UNION ALL
SELECT '张三', '2011-6-18 00:00:02 ' UNION ALL
SELECT '李四', '2011-6-18 00:00:20.....' UNION ALL
SELECT '李四', '2011-6-18 00:00:40.....' UNION ALL
SELECT '小五', '2011-6-18 00:02:20.....' UNION ALL
SELECT '小五', '2011-6-18 00:04:20.....' UNION ALL
SELECT '张三', '2011-6-17 00:00:01.....' UNION ALL
SELECT '张三', '2011-6-17 00:00:02 ' UNION ALL
SELECT '李四', '2011-6-17 00:00:20.....' UNION ALL
SELECT '李四', '2011-6-17 00:00:40.....' UNION ALL
SELECT '小五', '2011-6-17 00:02:20.....' UNION ALL
SELECT '小五', '2011-6-17 00:04:20.....'

SELECT a.[name] ,
LEFT(a.[time], 9) AS [time]
FROM dbo.tbtmp a
WHERE NOT EXISTS ( SELECT 1
FROM dbo.tbtmp
WHERE [name] = a.[name]
AND LEFT([time], 9) = LEFT(a.[time], 9)
AND LEFT([time], 18) > LEFT(a.[time], 18) )

DROP TABLE dbo.tbtmp
/*
name time
---------- ------------------
张三 2011-6-18
李四 2011-6-18
小五 2011-6-18
张三 2011-6-17
李四 2011-6-17
小五 2011-6-17

(6 行受影响)
*/

newdigitime 2011-06-18
  • 打赏
  • 举报
回复
必须在存储过程中使用自定义函数
或者用递归,或临时表+循环语句
linsx1987 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 xia777xia 的回复:]
引用 15 楼 jike062 的回复:
SQL code

select * from datatable order by 姓名,日期 desc


这样?

楼主想表达的不是这样的
[/Quote]

是的,group的话,全部都会归为一组,还真是摸不着头脑了
jvs 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 jike062 的回复:]
SQL code

select * from datatable order by 姓名,日期 desc


这样?
[/Quote]
楼主想表达的不是这样的
老狮子 2011-06-18
  • 打赏
  • 举报
回复
如果要分页的话就这样

select top([pagesize]) * from datatable where 日期 not in
(select top ([pageindex]*[pagesize]) rdate from datatable order by 姓名,日期 desc) order by 姓名,日期 desc

数据量大的话可以给表按这个排序建个索引。
老狮子 2011-06-18
  • 打赏
  • 举报
回复

select * from datatable order by 姓名,日期 desc

这样?
md5e 2011-06-18
  • 打赏
  • 举报
回复
不好控制吧,除非你每一轮的用户的时间都比下一轮的时间要大

你就可以用 时间Desc + 姓名来进行控件,要不最多只能够控制一次
ziyeage 2011-06-18
  • 打赏
  • 举报
回复
好象接近于一个主排序,一个次排序的样子。
linsx1987 2011-06-18
  • 打赏
  • 举报
回复
数据全部提取出来量太大了,我是分页用的
kkbac 2011-06-18
  • 打赏
  • 举报
回复
规律没找到. 可以全部按照时间排序提取出来, 之后循环在程序里面显示吧.
linsx1987 2011-06-18
  • 打赏
  • 举报
回复
有点像是循环输出吧。
就一人一次这样子~~~轮流进行
kkbac 2011-06-18
  • 打赏
  • 举报
回复
你这个张三李四的排法的规律是什么?
linsx1987 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhonghua0319 的回复:]
你可以再试试这个sql,不行的话,把结果贴贴出来.
select * from datable
group by 时间字段,名字字段
order by 时间字段 desc
只要不在group by后的字段查询出来的字段要有聚合函数如max(字段名)
[/Quote]
你这样子好像是不行的,报错。
选择列表中的列 'id' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
zhonghua0319 2011-06-18
  • 打赏
  • 举报
回复
最好把你写的sql也贴出来?
zhonghua0319 2011-06-18
  • 打赏
  • 举报
回复
你可以再试试这个sql,不行的话,把结果贴贴出来.
select * from datable
group by 时间字段,名字字段
order by 时间字段 desc
只要不在group by后的字段查询出来的字段要有聚合函数如max(字段名)
zhonghua0319 2011-06-18
  • 打赏
  • 举报
回复
你试试这个sql,不行的话,把结果贴贴出来.
select * from datable
group by 时间字段
order by 时间字段 desc
只要不在group by后的字段查询出来的字段要有聚合函数如max(字段名)
linsx1987 2011-06-18
  • 打赏
  • 举报
回复
帖子沉了吗?有高手在吗?
linsx1987 2011-06-18
  • 打赏
  • 举报
回复
表里的数据是这样的:
张三 2011-6-18 00:00:01.....(后面字段省略)
张三 2011-6-18 00:00:02

李四 2011-6-18 00:00:20.....
李四 2011-6-18 00:00:40.....

小五 2011-6-18 00:02:20.....
小五 2011-6-18 00:04:20.....

张三 2011-6-17 00:00:01.....(后面字段省略)
张三 2011-6-17 00:00:02

李四 2011-6-17 00:00:20.....
李四 2011-6-17 00:00:40.....

小五 2011-6-17 00:02:20.....
小五 2011-6-17 00:04:20.....

每一天都有数据不断加入。我就想根据人名,比如:张三最新的一条信息排在前面,接下去就是第二个人名(李四)的一条最新的信息,。。。。然后人名循环一次完了,再接下去就又是张三的第二条信息,李四的第二条信息~~~以此类推~~~

加载更多回复(2)

62,041

社区成员

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

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

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

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