当前位置: 代码迷 >> Sql Server >> mssql 先按某列分组 然后准时间排序 急
  详细解决方案

mssql 先按某列分组 然后准时间排序 急

热度:7   发布时间:2016-04-24 20:05:59.0
mssql 先按某列分组 然后按时间排序 急啊



需要达到的目的是 bbsanswerbatchid 这列值相同的排在一起 然后按时间升序排序

------解决方案--------------------
那不是
select* from tablename
 order by bbsanswerbatchid ,bbs…***time
------解决方案--------------------
select *
from tb
order by bbsanswerbatchid ,bbsanswersendtime
------解决方案--------------------
你这个数据列bbsanswerbatchid就象NEWID()一样,应该是没有相同的数据吧?看你的要求好象没有什么特殊的呢
------解决方案--------------------
第一行跟第三个就是重复的,倒数第二个跟倒数第四个也是一样的
应该是个字表,有对应的主表的ID是唯一的吧
------解决方案--------------------
引用:
Quote: 引用:

你这个数据列bbsanswerbatchid就象NEWID()一样,应该是没有相同的数据吧?看你的要求好象没有什么特殊的呢


bbsanswerbatchid 有相同的数据

看到了,就按照二楼的语句排序可以达到你的要求
------解决方案--------------------
SELECT *
FROM tabl
ORDER BY bbsanswerbatchid ,bbsanswersendtime
 
order by先排序第一列,也就是bbsanswerbatchid ,如果bbsanswerbatchid 相同,再排序bbsanswersendtime,asc是默认,不需要写出来,就是升序,如果bbsanswerbatchid 需要降序,可以加bbsanswerbatchid  desc这样写法
------解决方案--------------------
引用:
如果 前面的那列值不一样的时候 优先按时间排序, 
这样分开说  先把前面那列值相同的数据 列出来 排序后 然后按照时间排序 +  前面那列值不同的数据 按照时间排序 这2个集合合起来 就是最纵结果! 
 用程序怎么表达
bbsanswerbatchid 这个值先排序,对于bbsanswerbatchid 相同的,才按日期排序,否则还是先按bbsanswerbatchid 排序
------解决方案--------------------
引用:



需要达到的目的是 bbsanswerbatchid 这列值相同的排在一起 然后按时间升序排序


你要的是这样的吧,如果bbsanswerbatchid 是相同的,先排前面,如果是单个的,这些单个的都按照时间来排序:

select bbsanswerbatchid,bbsanswersendtime
from
(
SELECT *,
       case when (count(*) over(partition by bbsanswerbatchid)) > 1
                 then 1
            else 0
       end as bbsanswerbatchid_flag
FROM tabl 
)t
ORDER BY bbsanswerbatchid_flag desc,bbsanswersendtime


------解决方案--------------------
我试了一下,应该是可以的:


;with tabl(bbsanswerbatchid,bbsanswersendtime)
as
(
select 'abc','2013-01-09' union all
select 'abc','2013-01-10' union all
select 'def','2013-09-01' union all
select 'fgh','2013-09-10'
)

select bbsanswerbatchid,bbsanswersendtime
from
(
SELECT *,
       case when (count(*) over(partition by bbsanswerbatchid)) > 1
                 then 1
            else 0
       end as bbsanswerbatchid_flag
FROM tabl 
)t
ORDER BY bbsanswerbatchid_flag desc,bbsanswersendtime
/*
bbsanswerbatchid bbsanswersendtime
abc                 2013-01-09
abc                 2013-01-10
def                 2013-09-01
fgh                 2013-09-10
*/

------解决方案--------------------
引用:
Quote: 引用:




Quote: 引用:

你这个数据列bbsanswerbatchid就象NEWID()一样,应该是没有相同的数据吧?看你的要求好象没有什么特殊的呢


bbsanswerbatchid 有相同的数据

看到了,就按照二楼的语句排序可以达到你的要求


oracle的
DB Block Gets和Consistent Gets怎么理解?

网上通用的解释越看越糊涂



 1、DB Block Gets(当前请求的块数目)当前模式块意思就是在操作中正好提取的块数目,而不是在一致性读的情况下而产生的块数。正常的情况下,一个查询提取的块是在查询开始的那个时间点上存在的数据块,当前块是在这个时刻存在的数据块,而不是在这个时间点之前或者之后的数据块数目。


2、Consistent Gets(数据请求总数在回滚段Buffer中的数据一致性读所需要的数据块)这里的概念是在处理你这个操作的时候需要在一致性读状态上处理多少个块,这些块产生的主要原因是因为由于在你查询的过程中,由于其他会话对数据块进行操作,而对所要查询的块有了修改,但是由于我们的查询是在这些修改之前调用的,所以需要对回滚段中的数据块的前映像进行查询,以保证数据的一致性。这样就产 生了一致性读。


这个怎么和sqlserver的逻辑读做对比,
就拿已提交读这个隔离级别来说,哪有什么一致不一致读的问题,读到的数据都是已提交的数据
假如一个事物正在修改某条数据,
  相关解决方案