我有一個表,每個用戶有多行。每個用戶將具有相同的行數,但行ID對於每個用戶都是不同的,所以我如何獲得給定用戶的第N行?如何從sybase獲取第N行數據?
假設通過user_id,row_id子句進行的訂單,這樣可以保證任何給定用戶的順序一致。
這是sybase 12我正在這裏工作。
我有一個表,每個用戶有多行。每個用戶將具有相同的行數,但行ID對於每個用戶都是不同的,所以我如何獲得給定用戶的第N行?如何從sybase獲取第N行數據?
假設通過user_id,row_id子句進行的訂單,這樣可以保證任何給定用戶的順序一致。
這是sybase 12我正在這裏工作。
如果您可以將seq_id
列添加到從每個user_id的0開始的表中。您可以使用此列進行查詢。
不能更改數據,不是一個選項。好主意。 – stu 2010-08-31 19:42:43
@stu:您可以添加另一個表(鍵入現有表的user_id和row_id的組合)和seq_id嗎?除非你可以在某個地方添加某種數據,否則你很不幸,因爲你的數據庫設計不適合你需要做的事情。 – 2010-08-31 20:23:48
好吧,有點糟糕。更改這些表格(其中有一堆)會涉及修復大量遺留應用程序,這就是爲什麼它不是真正的選項,只適用於我的小型項目。 我想出的唯一辦法是從選擇類型的東西,我做了選擇頂部3,然後外面做一個選擇頂部1順序顛倒。非常醜陋,但它會奏效。我希望更簡單些。 它會這樣: 選擇字段從(從表中選擇top 1字段)按字段排序 – stu 2010-09-02 15:10:08
SYBASE應該窗口函數
SELECT *
FROM (select row_number() over (order by user_id, row_id) as row, bar.*
from bar
) foo
WHERE foo.row = 7
這對於任何地方的sybase而不是Sybase ASE,答案不適用於不幸的是,這個問題。 ASE不支持OLAP功能。 – bestsss 2012-02-06 11:48:33
您是否將SQL Anywhere的「sybase隨處可疑」混淆?分析功能(第一環節)應該在兩者中;儘管如此,我承認,我對SYBASE的瞭解有限。儘管如此,作者從未聲明過他是否使用ASE或SA – vol7ron 2012-02-06 14:55:18
Sybase IQ不是Sybase ASE ... sybase的東西很混亂,OP說的是Sybase 12(這是ASE) – bestsss 2012-02-06 19:37:07
關係數據庫沒有本機順序的概念。詢問表中的第n項是一個無效的問題,相反,您必須始終使用'order by'子句來詢問您的數據,我不認爲這是您在此處指定的內容。 – Cruachan 2010-08-31 19:21:12
我會更新問題... – stu 2010-08-31 19:29:21
@Cruachan:這是錯誤的,請參閱我的回答 – vol7ron 2011-06-22 05:09:08