2014-02-25 56 views
0

我正在努力研究如何根据两行之间的差异轻松选择记录。SQL根据两行之间的差异进行选择

我有一张这样的桌子。

Time | Store | Code | %  | Ranked | 
------------------------------------------ 
13:50 | Swindon | 33 | 32.578 | 1  | 
13:50 | Reading | 31 | 29.438 | 2  | 
13:50 | Bath | 32 | 28.221 | 3  | 
14:50 | Swindon | 33 | 32.100 | 1  | 
14:50 | Reading | 32 | 30.987 | 2  | 
14:50 | Bath | 32 | 28.335 | 3  | 

我需要根据商店在不同时间的百分比差异来做不同的报表。

一个例子。

选择所有商店从商店排名1,其中>=至3所以在这种情况下,它只能选择13:50斯温顿因为在%不同的是刚刚超过3%,位居第2

还有其他的变化,但我相信,一旦我有一个答案,我可以自己找出其余的。

我知道正常的选择语句,但我想我必须做一个加入,但不知道如何。

+1

你的问题对我来说并不完全清楚。你想检查百分比之间的时间间隔,并作出决定? –

+0

请改善您的问题。它非常混乱。您的查询条件指定'排名',但它提示'%'。 –

+0

'Join'用于查看来自2个或更多表格的数据,您可能只是想从我所了解的问题中找到WHERE条件和适当的排序顺序。正如帕特里克所说,这不是很清楚。 –

回答

0

基于以上我提供的信息假设是这样的:

select * 
from table t1 
inner join table t2 on t1.Time = t2.Time and t1.Ranked = 1 and t2.Ranked = 2 
where (t1.% - t2.%) > 3 

的列名是有点过了,但我想排名是基于时间。

+0

谢谢你这个工作很好,但在你的情况和下面的一个,我不得不交换连接的顺序,以获得排名第一的查询。但我真的很感谢帮助。 – user2982349

+0

对不起,我刚刚意识到查询拉出两个记录不只是第一次排名,这与下面的查询也是如此。 – user2982349

+0

我不明白,它工作与否?这两个查询的行为相同 – Boklucius

0
SELECT R1.store, 
     R1.timestamp 
FROM store_tbl R1, 
     store_tbl R23 
WHERE R1.ranked = 1 
     AND R23.ranked = 2 
     AND R1.timestamp = R23.timestamp 
     AND (R1.percentage - R23.percentage) > 3 
+0

谢谢你和上面的查询正常工作,除了上面我不得不交换From语句的顺序。 – user2982349

+0

对不起,你可以给我任何进一步的帮助,因为它拉出第一和第二的排名,我似乎无法获得第一名。我试图使用更多的AND子句,但这仍然不起作用。 – user2982349

+0

对不起,我没有看到“Store”修正,但MS SQL服务器似乎无法识别该命令。 – user2982349