我有一个令人沮丧的麻烦,我想在一个例子上显示
表(ID,姓名,SUBNAME,ID2,得分)
ID Name Subname ID2 Score
1 A A87564 1 <
2 A A87564 2 <
3 A A87564 3 <
4 A A78564 1 >
5 A A78564 2 >
6 B B23456 1 <
7 B B23456 2 <
8 B B32456 1 >
9 B B32456 2 >
5 B B32456 3 >
6 C C89004 1 <
..........................
..........................
每个名称总有两个不同的子名称,但具有相同子名称的行数不是常量。我故意在Subname单元格中编写了一组数字,以显示它在具有相同名称的行之间的变化。正如您所看到的,每个名称的最后三个数字是相同的,两个第一个数字会改变位置。
我设法使用
填写ID2列 ( SELECT COUNT(T2.Subname)
FROM Table AS T2
WHERE T2.ID <= T.ID
AND T.Subname = T2.Subname )
AS ID2
但我完全没有尝试分配&#39;&lt;&#39;或者&#39;&gt;&#39;取决于子名称或ID2的图标在连续行之间发生变化。分配这些图标中的哪一个并不重要。唯一的条件是它应该在相同名称的子名称之间进行更改。
我试图使用许多sql工具和函数修复它,使用ID2差异甚至尝试基于子名称文字差异。
如果您有任何想法可以帮助我,请告诉我。
答案 0 :(得分:-1)
几乎可以用子查询完成,(将你的工作查询作为子查询说&#34;当前&#34;并加入它自己(&#34;之前的#34;),并比较一行&# 39; s值为max(previous.identifier)小于current.identifier的行中的值,但这可能是mysql内联变量将使其更具可读性和更高性能的情况。所以这是一个不完美的开始:
select ID,Name,Subname,ID2,
if( @lastSubname = Subname or @lastSubname="", @flip, @flop ) as Score,
if (@lastSubname = Subname or @lastSubname="", @temp:="", @temp:=@flip) as a,
if (@lastSubname = Subname or @lastSubname="", @temp:="", @flip:=@flop) as b,
if (@lastSubname = Subname or @lastSubname="", @temp:="", @flop:=@temp) as c,
@lastSubname:=Subname
from t1, ( select @lastSubname := "", @flip :="<", @flop :=">" , @temp:="") Vars
order by Subname
select @lastSubname...
初始化变量,并在&#34; end&#34;更新变量。每行(在你需要检查之后)。更改值时会交换flip
和flop
。可能很容易有一种更简洁的方式来做这件事...我正在玩here on sqlFiddle。