簡體   English   中英

如何選擇日期時間字段中所有值的最大值,但小於或等於其他日期時間值?

[英]How to select maximum of all values in datetime field but less or equal to other datetime value?

這是我的桌子,很la腳,但不要注意:

 CREATE TABLE items (
 item_id int(11) NOT NULL AUTO_INCREMENT,
 item_name varchar(255) NOT NULL,
 item_cat int(11) NOT NULL,
 item_desc text DEFAULT NULL,
 item_cost decimal(10, 0) DEFAULT NULL,
 item_image varchar(255) NOT NULL,
 item_brand varchar(255) DEFAULT NULL,
 item_active int(11) NOT NULL,
 PRIMARY KEY (item_id)
)

CREATE TABLE prices (
price_id decimal(10, 0) NOT NULL,
price_date datetime NOT NULL,
price decimal(10, 0) DEFAULT NULL,
fake int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (fake)
)

CREATE TABLE orders (
order_id int(11) NOT NULL AUTO_INCREMENT,
order_fam varchar(255) NOT NULL,
order_name varchar(255) NOT NULL,
order_otc varchar(255) DEFAULT NULL,
order_phone varchar(255) NOT NULL,
order_email varchar(255) DEFAULT NULL,
order_delivery int(11) NOT NULL,
order_payment int(11) NOT NULL,
order_comment varchar(255) DEFAULT NULL,
order_status int(11) DEFAULT NULL,
order_adress varchar(255) DEFAULT NULL,
order_user_id int(11) DEFAULT NULL,
order_date datetime DEFAULT NULL,
PRIMARY KEY (order_id)
)

mysql_query('SET NAMES utf8');
$query = 'SELECT *                                                 
 FROM                                               
prices                                                  
 WHERE                                              
price_date IN (SELECT MAX(price_date) FROM prices WHERE price_id= ' . $it . ')';

price_id對item_id的引用

但是,這是交易。

現在,我希望應用程序在訂單(order_date)時顯示商品的價格,並且在“價格”中有這樣的價格歷史記錄:

2013-04-19 10:13:51 $ 2000

2013-03-21 11:15:56 $ 3000

2013-02-03 10:45:22 $ 1400

因此,到目前為止,我只是從該表中選擇了最大日期。 您如何建議我修改查詢? (“價格”的最大日期時間,但小於或等於order_date)

編輯:我想選擇在訂單(order_date字段)時處於活動狀態的價格值(price字段)。 因此,如果order_date = 2013-03-29 11:15:56則價格= $ 3000而不是$ 2000而不是$ 1400

我認為您的查詢可以改善:

SELECT * 
FROM prices                                                  
ORDER BY price_date DESC LIMIT 1;

如果您是我,我還將在訂單表中添加一個字段“ price_id”,當您需要在下訂單時調回預價時,這將是您選擇的鈎子:

SELECT o.*, p.price
FROM orders o                                              
INNER JOIN prices p ON (o.price_id = p.price_id);

希望對您有所幫助!

SELECT p1.* FROM                                               
prices  p1 
inner join prices p2 on p1.price_date < p2.price_date  
WHERE 
p2.price_date = 'some date' 
ORDER BY p1.price DESC LIMIT 1 

解決方法如下:

mysql_query('SET NAMES utf8');
$query = 'SELECT *
FROM
     prices
    WHERE
    price_id = ' . $it . ' AND price_date <= "' . $date . '" ORDER BY price_date DESC LIMIT  1';

我真的不需要LIMIT,因為我沒有在數組中運行任何循環,這只是為了清楚起見

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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