【发布时间】:2019-08-12 00:27:37
【问题描述】:
我正在尝试选择每个 user_id 具有最高 date_end 值的行。 date_end 可以为空,在这种情况下,我假设当前(或给定)日期:
数据:
CREATE TABLE `prices_test` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`user_id` int(10) NOT NULL,
`date_end` date DEFAULT NULL,
`price` decimal(10,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of prices_test
-- ----------------------------
INSERT INTO `prices_test` VALUES ('2', '2', '2018-11-29', '30000.00');
INSERT INTO `prices_test` VALUES ('3', '6', '2018-07-29', '20000.00');
INSERT INTO `prices_test` VALUES ('4', '18', '2017-12-31', '3999.00');
INSERT INTO `prices_test` VALUES ('7', '18', '2018-03-01', '10000.00');
INSERT INTO `prices_test` VALUES ('10', '6', null, '44000.00');
INSERT INTO `prices_test` VALUES ('13', '62', '2018-08-26', '12000.00');
INSERT INTO `prices_test` VALUES ('16', '62', null, '36500.00');
INSERT INTO `prices_test` VALUES ('17', '68', '2014-06-15', '22000.00');
INSERT INTO `prices_test` VALUES ('18', '69', null, '36500.00');
INSERT INTO `prices_test` VALUES ('19', '60', null, '10000.00');
INSERT INTO `prices_test` VALUES ('20', '68', null, '30000.00');
我正在尝试使用的查询:
SELECT t.*
FROM prices_test t
INNER JOIN (
SELECT id, user_id, MAX(IFNULL(date_end, '2019-03-21')) AS date_end
FROM prices_test GROUP BY id
) AS max USING (id, date_end);
sql 小提琴:http://sqlfiddle.com/#!9/9e61e0/4
问题是我的查询似乎忽略了 MAX()。它选择 id=3 的 user_id,但我希望 id=10 因为 IFNULL(date_end, '2019-03-21') 从 id=3 给 id=10 的日期比 '2018-07-29' 更高,对吧?其他所有的 ID 也不如这里预期的那样。
我做错了什么?
【问题讨论】:
-
您使用的是哪个版本的 MySQL?
标签: mysql sql aggregate-functions