author_wcID esiID isTx
11 2510 0
12 2510 0
13 2510 1
8 2511 0
9 2511 0
相同的esiID,如果isTx为1则取这条记录,否则再取author_wcID相对较小的一条记录.
也就是说上面的表我想得到这样的记录
13 2510 1
8 2511 0
表名:tbl_esi_places
麻烦Sql高手讲解并写下函数或Sql语句,没园豆了!
思路有了,SQL自然就有了。
思路
按照 isTx Desending, author_wcID Asending 排序, 那么不管有没有isTx为1的,
每组esliID的第一行数据就是你想要的数据。
这是假设isTx只有1和0这两个数据的情况。
具体的SQL我就不写了。
爱编程的大叔 写个呗
select * from tbl_esi_places order by isTx desc,author_wcID asc
这样写虽然上面的是需要的记录,但是下面也有不需要的记录,不知道怎么过滤
上面的是需要的记录,但是下面也没有过滤哦
@依人:
自己Google 一下Rank函数用法,就知道了。
@爱编程的大叔:
谢谢!辛苦了
sql技术不好,咱也写不出来,但我有思路,如果写代码我倒能写出来。
1、以esiID分组,得到类似 2510 ({11,0},{12,0},{13,1})2511 ({8,0},{9,0})
2、循环每个分组,先判断有无isTx=1的项,如有,添加此条记录到临时列表中,如没有,以author_wcID排序分组记录,找出最小的记录添加到临时列表
谢谢您的回答,c#代码我也是可以写的,关键是sql写不出来,我要用这个在生成视图还要做一些复杂的操作。关键sql函数写不出来
select author_wcID,esiID,isTx from tb where isTx=1 union all select author_wcID,esiID,isTx from tb a where not exists(select 1 from tb where esiID=a.esiID and isTx=1) and not exists(select 1 from tb where esiID=a.esiID and author_wcID<a.author_wcID)
应该是这个意思
谢谢!