首先我正在使用SQL Server。
我正在加入一个表格,如下例所示:
SELECT t.theDate,
s.theDate,
t.bitField,
s.bitField,
t.NAME,
s.NAME
FROM table1 t
INNER JOIN table1 s ON t.NAME = s.NAME
如果我从生成的数据集中取一个随机行(即X)。
我可以将第X行的任何字段中的值与第X-1行或第X + 1行的任何字段中的值进行比较吗?
示例:我想将第5行的日期与第4行的s.theDate或第3行的s.theDate进行比较。
示例数据如下:
期望的结果:
我想拉出t.bitfield和s.bitfield相反的所有行对,并且t.theDate和s.theDate是相反的。
从图像中可以看到行(3& 4),(5& 6),(7& 8)......等等。
我真的很感激任何帮助!
可以吗?
答案 0 :(得分:0)
这个怎么样?
WITH ts as (
SELECT t.theDate as theDate1, s.theDate as theDate2,
t.bitField as bitField1, s.bitField as bitField2,
t.NAME -- there is only one name
FROM table1 t INNER JOIN
table1 s
ON t.NAME = s.NAME
)
SELECT ts.*
FROM ts
WHERE EXISTS (SELECT 1
FROM ts ts2
WHERE ts2.name = ts.name AND
ts2.theDate1 = ts.theDate2 AND
ts2.theDate2 = ts.theDate1 AND
ts2.bitField1 = ts.bitField2 AND
ts2.bitField2 = ts.bitField1
);
答案 1 :(得分:0)
Varinant 1:您似乎想要使用%process_two%
。
ranking function
Varinant 2:
要获得标量值,您可以使用排名函数if objcet_id('tempdb..#TmpOrderedTable') is not null drop table #TmpOrderedTable
select *, row_number(order by columnlist, (select 0)) rn
into #TmpOrderedTable
from table1 t
select *
from #TmpOrderedTable t0
inner join #TmpOrderedTable tplus on t0.rn = tplus.rn + 1 -- next one
inner join #TmpOrderedTable tminus on t0.rn = tminus.rn - 1 -- previous one
和lag
。或子查询。
Varinant 3:
您可以使用lead
,但如果您不想复制,则必须指定唯一的非跟踪密钥。
Varinant 4:
您可以使用selfjoin
。
你的问题不太清楚,所以我希望这是你的目标。