我有一個簡單的表:獲取價格在每週末
prices(fromwhichweek(int),newprice(int))
data example:
1,20
3,21
10,30
所以即時尋找一個SQL語句(S)返回在每個週末是什麼價格?
喜歡的東西(根據上述3行):
1,20
2,20
3,21
4,21
5,21
6,21
7,21
8,21
9,21
10,30
...
我有一個簡單的表:獲取價格在每週末
prices(fromwhichweek(int),newprice(int))
data example:
1,20
3,21
10,30
所以即時尋找一個SQL語句(S)返回在每個週末是什麼價格?
喜歡的東西(根據上述3行):
1,20
2,20
3,21
4,21
5,21
6,21
7,21
8,21
9,21
10,30
...
您可以創建填充了52周的表。
create table weeks (week int);
insert into weeks values (1), (2), ....(52);
然後您可以執行以下查詢來獲得結果。這是一個本地MYSQL查詢。如果您使用的是不同的SQL供應商,則可能需要稍微更改它。
select A.week, B.price from weeks as A, prices as B where
B.fromwhichweek = (select C.fromwhichweek from prices as C where
C.fromwhichweek <= A.week order by C.fromwhichweek desc limit 1);
這會給你你說你想要的輸出。如果你想要的東西不同,修改你的問題:)
SELECT
fromwhichweek, price
FROM
prices
ORDER BY
fromwhichweek ASC
它不會給我每個星期... – Palpatine 2013-03-27 00:29:43
您的示例數據顯示只有一個'fromwhichweek'發生。是否有多個'從不同的'價格是誰?如果您想要更可行的答案,請發佈更多樣本數據。 – rbedger 2013-03-27 00:31:49
示例已編輯。 「從whwhweek」只有一次發生。主要目標是得到一週價格是多少,因爲有另一個有訂單的表,並且有哪個星期,哪個人訂購的是這樣的: person1,1(week),1(day),whatordered; person1,1(week),2(day),whatordered; person1,1(week),3(day),whatordered; person1,2(week),1(day),whatordered; person1,2(week),2(day),whatordered; 我想知道一個人每天必須付多少錢(存儲在prices.newprice)我希望我澄清問題 – Palpatine 2013-03-27 00:52:38
您需要生成一個星期序列。以下版本由select
語句中使用相關子查詢得到的價格:
select w.week,
(select top 1 newprice from prices p where w.week >= p.fromwhichweek
order by fromwhichweek desc
) theprice
from (select 1 as week union all select 2 union all select 3 union all select 4 union all
select 5 union all select 6 union all select 7 union all select 8 union all
select 9 union all select 10
) w
一些評論。這取決於有一個星期的清單。這是用一個明確的子查詢完成的。取決於數據庫,還有其他方法。
@AaronBertrand。 。 。我想我可能會失明。這個標籤重複了三次,我設法錯過了它。 – 2013-03-27 01:15:19
以下是根據表中最高的fromwhichweek
值確定動態需要的週數的方法。您可以通過明確地指定@end
(例如,嘗試22或25)而不是使用MAX
來擴展該值。這應該用52周的時間來衡量,假定你的價格表真的很簡單。
DECLARE @prices TABLE(fromwhichweek INT, newprice INT);
INSERT @prices VALUES
(1, 20),
(3, 21),
(10,30);
DECLARE @start INT, @end INT;
SELECT @start = MIN(fromwhichweek),
@end = MAX(fromwhichweek)
FROM @prices;
;WITH x AS
(
SELECT TOP (@[email protected]+1)
n = @start-1+ROW_NUMBER() OVER (ORDER BY [object_id])
FROM sys.all_objects ORDER BY [object_id]
)
SELECT fromwhichweek = x.n,
newprice = COALESCE(p.newprice, (
SELECT TOP (1) newprice FROM @prices
WHERE fromwhichweek <= x.n
AND newprice IS NOT NULL
ORDER BY fromwhichweek DESC))
FROM x
LEFT OUTER JOIN @prices AS p
ON x.n = p.fromwhichweek
ORDER BY x.n;
是根據您的示例輸入您的預期結果?如果是這樣,你還有更多解釋要做 – 2013-03-27 00:30:56
看起來這裏的目標是用前一週的價格填補缺失的周。但是,我們怎麼知道要求的週數範圍? – WarrenT 2013-03-27 00:36:27