我在为表中的价格到期选择MAX日期时遇到问题。 该表存储历史数据,如果上周没有设置日期,则会搜索MAX日期以自动填充价格到期日。
我的问题是,如果我将价格到期更新为NULL(有时价格不会过期),那么当我检查以获得最后的价格到期日期时,我会在NULL条目之前获得日期。我想要的是NULL日期,如果这是最新的条目。
这是我的表:
CREATE TABLE IF NOT EXISTS `customers_view_items` (
`cid` bigint(20) NOT NULL AUTO_INCREMENT,
`item` varchar(15) NOT NULL COMMENT 'item number from dProduce',
`custno` varchar(6) NOT NULL COMMENT 'customer number from dProduce',
`week_of` date NOT NULL COMMENT 'week for pricing this was saved as',
`cost` double(12,4) NOT NULL COMMENT 'current cost when this was saved',
`market_price` double(12,4) NOT NULL COMMENT 'current market price when this was saved',
`discount` double(12,4) NOT NULL COMMENT 'discount that was applied to get the price for history',
`current_margin` double(12,4) NOT NULL COMMENT 'current margin for history',
`avg_margin` double(12,4) NOT NULL COMMENT 'average margin for history',
`volume` double(12,3) NOT NULL COMMENT 'volume',
`price` double(12,4) NOT NULL COMMENT 'Price set for customer item',
`priceexp` date DEFAULT NULL COMMENT 'Date price expires',
`saved_on` datetime NOT NULL COMMENT 'Datetime of save',
`saved_by` int(11) NOT NULL COMMENT 'user id that saved',
PRIMARY KEY (`cid`),
UNIQUE KEY `custno_item_weekof` (`custno`,`item`,`week_of`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Stores the customer items data from customer view items sect' AUTO_INCREMENT=629 ;
我到目前为止的查询是:
SELECT
custno,
item,
price,
UNIX_TIMESTAMP(priceexp) as priceexp
FROM `customers_view_items`
WHERE custno = 'LASP'
ORDER BY `week_of` DESC
这给了我数据的行,但我似乎无法获取最新的条目。
如果我MAX(priceexp)
我得到最高价格到期(如预期的那样)
我认为我需要做一个子查询来获得我需要的结果,但我现在迷失了。
我添加了cid
来识别最新的条目,但我认为week_of
也会起作用(实际上是首选的)
任何正确方向的推动都会有很大帮助。
由于
答案 0 :(得分:0)
是。您可以使用子查询首先提取最新记录。
select a.custno, a.item, a.price, unix_timestamp(a.priceexp) priceexp
from customers_view_items a
join (
select custno, item, max(week_of) week_of
from customers_view_items
group by custno, item) b on a.custno = b.custno and a.item = b.item and a.week_of = b.week_of;