2014-03-06 133 views
1

這個問題可能看起來完全是愚蠢的,但它在這裏。動態選擇列 - Oracle SQL查詢

是否可以在sql查詢中指定/使用動態列名稱。

例如,比方說,表格有以下幾列。

Column: "1", "2", "3", "4", "5" 

那麼對於X的給定值(DATEDIFF功能來)讓我們說3 - 我想從「1」獲得的值之和在列「3」。對於X = 4,值之和在列從「1」到「4」等等...

實際的問題

這個表基本上用於跟蹤多少次的特定用戶登錄過去X天。 X被定義。我們僅在用戶實際登錄時更新記錄。因此,爲了能夠在任何時間點計算正確的值,我想到了這個模式。

「用戶」, 「LastLoginDate」, 「1」, 「2」, 「3」, 「4」, 「5」,

"1" - represents number of times user logged in on 1 day before `LastLoginDate` 
"2" - represents number of times user logged in on 2 day before `LastLoginDate` 
and so on.. 

我們上LastLoginDate計算值+ 2天 - 我只是總結了"1", "2", "3"列中的值。因爲2天過去了,所以列"4" and "5"中的值已過時。

我希望我能夠正確解釋問題。

Jitendra

+1

這是一個非規範化的表格設計。沒有一個標準(通常也不是非標準)的方式來做你想做的事情。你應該指定你正在使用哪個DBMS;可能有一個特定於該DBMS的技巧。 –

+0

@JonathanLeffler更新了問題。 – RandomQuestion

回答

3

我想你會更快樂了很多與表是這樣的:

create table login_counts (
    user  varchar2(30) 
    ,the_date date 
    ,num_logins integer 
); 

每次在你用戶登錄可以增加相關行。 (如果需要,可以同時刪除舊行。)在指定時間段(如「today - 2 days」或「last_login - 2 days」)中選擇登錄總數對於此結構很簡單。

+1

另一件好事就是你可以改變你的記錄而不必混淆數據庫。如果您突然想要保存500天的記錄,則不必製作500列的專欄(請不要這樣做)。 – BWStearns

+0

看起來不錯。似乎我在我現有的表格中添加列的思維過程中被帶走了。 – RandomQuestion