请教码农大师,有个SQL查询不会,虚心请教
- 小猪快跑在数据库的某表中有个数据表 其中两列 列名分别是F1、F2
都储存了一堆数据
用F1-F2
得到一堆差值
这些差值有个特点 就是+-+-+++----这样的无序分布
现在是想用sql把这堆分布搞成+-+-+-+-+-这样的
请问大师如何写这个sql语句
我用的C# 如果C#能实现也可以
祭扫伺候 - 小猪快跑就是把+++++++---的第一个+提出来
再把第一个-提出来
搞成+-
如+-+-+++++-------++-----++----
搞成
+-+-+-+-+- - exquo然后第二个+-、第三个+-这么连下去?
- dzefone数据要按+-+-入库还是只是显示?
如果你对数据库的需求只是查询,后面的计算和展示是数据处理部分
那就按2楼的方案,两个一维数组一个+一个-,各取一个然后下标+1
如果对库里数据整体这么排,那就二维数组,多记录个原始数据,再写一个新表 - 小猪快跑是啊 就是这个意思
- 小猪快跑需要结果显示 然后写到数据库
大哥 你说的这个一维 二维数组的 我不懂啊 能举个例子吗。。。。。 - 小猪快跑其实就是股票里的金叉死叉
金叉就标记一下
死叉也标记一下
我是这样理解的 - roto我操,我想出来怎么写了
写2个子查询,一个只查+,一个只查-,每个子查询多写一个计算列作为排序标志比如叫sortflag,一个放1、3、5、7、9奇数,一个放2、4、6、8、10偶数,把这2个子查询的结果集union起来,order by sortflag,就是你要的结果了 - 小猪快跑比如+++----+++
查询+后是++++++
这6个对应sortflog是123579
是这个意思不?
还是
+++---+++
对应的sortflog是111222333 - roto查询+的子查询,sortflag放13579
查询-的子查询,sortflag放26810
这样2个结果集合在一起,用sortflag排序,不就出来+-+-+-+-的效果了吗
sortflag的值看你的数据库啥类型的了,用行号*2-1和行号*2就能实现 - septem776只要求+-间隔不要求顺序?那sql查询结果order by F1-F2存到数组a,然后取a[0],a[n-1],a[1],a[n-2]....依次类推
- exquo正解
可以用row_number() over (order by abs(F1-F2) desc)获得sortflag
[本帖最后由 exquo 于 2020-11-19 14:34 编辑] - darkgame这是作业题吧
- 小猪快跑我没说明白
是这样的+++++-----
只提第一个+和第一个- 得到+-
并不是把+++++-----排成+-+-+-+-+- - 小猪快跑不是。。。。。
我也是第一次遇到。。。。 - dboy99
修正一下
[本帖最后由 dboy99 于 2020-11-19 14:44 编辑] - ooooo84row_number() over (partition by 分区字段 order by 排序字段) as rownum
查询条件加上
where rownum < 3 - zfz4869楼主语文不大好啊,如果是只取连续值的第一个值,那就是第三种方法。
def one_by_one(array):
plus_array = [i for i in array if i > 0]
minus_array = [i for i in array if i < 0]
for n,i in enumerate(minus_array):
plus_array.insert(n*2+1,i)
return plus_array
def group_by_sum(array):
new_array = []
for k,v in groupby(array,key=lambda x:x>0):
new_array.append(sum(list(v)))
return new_array
def only_first(array):
new_array = []
for k,v in groupby(array,key=lambda x:x>0):
new_array.append(list(v)[0])
return new_array - 小猪快跑说row_number附近语法错误 需要over关键字
- somesun不错,这个应该就是lz要的
- 保密这也太简单了,partition by diff得到rn,再select order by rn和diff的type就可以啦。