簡體   English   中英

獲取每個日期的最近記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM