2010-08-31 20 views
1

我有一個表,每個用戶有多行。每個用戶將具有相同的行數,但行ID對於每個用戶都是不同的,所以我如何獲得給定用戶的第N行?如何從sybase獲取第N行數據?

假設通過user_id,row_id子句進行的訂單,這樣可以保證任何給定用戶的順序一致。

這是sybase 12我正在這裏工作。

+2

關係數據庫沒有本機順序的概念。詢問表中的第n項是一個無效的問題,相反,您必須始終使用'order by'子句來詢問您的數據,我不認爲這是您在此處指定的內容。 – Cruachan 2010-08-31 19:21:12

+0

我會更新問題... – stu 2010-08-31 19:29:21

+1

@Cruachan:這是錯誤的,請參閱我的回答 – vol7ron 2011-06-22 05:09:08

回答

0

如果您可以將seq_id列添加到從每個user_id的0開始的表中。您可以使用此列進行查詢。

+0

不能更改數據,不是一個選項。好主意。 – stu 2010-08-31 19:42:43

+0

@stu:您可以添加另一個表(鍵入現有表的user_id和row_id的組合)和seq_id嗎?除非你可以在某個地方添加某種數據,否則你很不幸,因爲你的數據庫設計不適合你需要做的事情。 – 2010-08-31 20:23:48

+0

好吧,有點糟糕。更改這些表格(其中有一堆)會涉及修復大量遺留應用程序,這就是爲什麼它不是真正的選項,只適用於我的小型項目。 我想出的唯一辦法是從選擇類型的東西,我做了選擇頂部3,然後外面做一個選擇頂部1順序顛倒。非常醜陋,但它會奏效。我希望更簡單些。 它會這樣: 選擇字段從(從表中選擇top 1字段)按字段排序 – stu 2010-09-02 15:10:08

1

SYBASE應該窗口函數

SELECT * 
FROM (select row_number() over (order by user_id, row_id) as row, bar.* 
     from bar 
     ) foo 
WHERE foo.row = 7 
+0

這對於任何地方的sybase而不是Sybase ASE,答案不適用於不幸的是,這個問題。 ASE不支持OLAP功能。 – bestsss 2012-02-06 11:48:33

+0

您是否將SQL Anywhere的「sybase隨處可疑」混淆?分析功能(第一環節)應該在兩者中;儘管如此,我承認,我對SYBASE的瞭解有限。儘管如此,作者從未聲明過他是否使用ASE或SA – vol7ron 2012-02-06 14:55:18

+0

Sybase IQ不是Sybase ASE ... sybase的東西很混亂,OP說的是Sybase 12(這是ASE) – bestsss 2012-02-06 19:37:07

3

如果您正在使用Sybase SQL Anywhere的(目前還不清楚是否你使用SA或ASE) ,請查詢select陳述herestart attop條款。例如:

select top 1 start at 7 * from mytable order by user_id, row_id 

將檢索第7行。

+1

我使用的是ASE 15,沒有似乎在那裏工作。 – stu 2011-06-23 18:20:16

相關問題