[英]Get the closest record for every date
我試圖創建一個返回所有的價格從表的查詢skucompetition
在表中的每個日期creationdateformat
。
要澄清的是,creationdateformat中包含以下日期:
creationdateformat
2010-10-25
2010-10-26
2010-11-10
2010-11-24
2010-11-25
skucompetition具有以下價格:
sku creationdate price
PCR-BR2495112 2010-10-26 16:06:03 24.99
PCR-BR2495112 2010-11-10 13:01:43 27.99
PCR-BR2495112 2010-11-25 12:24:26 26.51
對於日期2010-10-25,它應該返回0,因為它是第一個價格存在之前的狀態。
對於日期2010-10-26,它應返回24,99
對於日期2010-11-10和2010-11-24,應返回27.99
對於日期2010-11-25,應返回26.51
等等。
如何最好地實現?
這應該為您指明正確的方向...
從樣本數據來看,您正在尋找在特定日期之前或特定日期的最新記錄。
您只對單個記錄感興趣,因此應將選擇限制為第一條記錄。
您可以簡化之前或部分內容。 “今天之前或之上”與“明天之前”相同。 因此,您將在“輸入日期加一天之前”查找任何內容。 這簡化了查詢,因為您不必擔心一天中的確切時間。
最后,要確保獲得最新記錄,您必須訂購記錄。
用偽代碼將是:
select the first record
from skucompetition
where creationdate is before (input date + one day)
order by creationdate so most recent record comes first
您應該處理在應用程序中返回0的特殊情況。 如果您正確地構造了查詢,則該查詢將與第一個日期之前的輸入日期的任何記錄都不匹配。 那是您的應用程序應處理“返回0”的情況。
我將創建一個查詢:
當然,確切的語法取決於您使用的RDBMS
SELECT price FROM skucompetition
WHERE sku = "<sku>" AND DATE(creationdate) <= "<date>"
ORDER BY date DESC LIMIT 1
這將選擇正確的SKU不早於“日期”的第一條記錄。 如果不存在,將返回NULL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.