选择最大日期,即使它为空?

时间:2014-06-15 21:56:45

标签: mysql date

我在为表中的价格到期选择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也会起作用(实际上是首选的)

任何正确方向的推动都会有很大帮助。

由于

1 个答案:

答案 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;