这是我正在使用的:
CREATE TABLE IF NOT EXISTS `rate` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`client_company` int(11) DEFAULT NULL,
`client_group` int(11) DEFAULT NULL,
`client_contact` int(11) DEFAULT NULL,
`role` int(11) DEFAULT NULL,
`date_from` datetime DEFAULT NULL,
`hourly_rate` decimal(18,2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `rate` (`id`, `client_company`, `client_group`,
`client_contact`, `role`, `date_from`, `hourly_rate`)
VALUES
(4, NULL, NULL, NULL, 3, '2012-07-30 14:48:16', 115.00),
(5, 3, NULL, NULL, 3, '2012-07-30 14:51:38', 110.00),
(6, 3, NULL, NULL, 3, '2012-07-30 14:59:20', 112.00);
此表存储客户的收费率;这个想法是,在寻找工作角色的正确费率时,我们首先寻找与给定角色和客户联系人匹配的费率,然后如果没有找到费率,将尝试匹配角色和客户组(或“部门”),然后是客户公司,最后只为角色本身寻找全球费率。美好的。
费率会随时间而变化,因此该表可能包含与角色、公司、组和客户联系人的任何给定组合匹配的多个条目:我想要一个查询,它只会返回每个不同组合的最新查询。
鉴于我几天前问了一个几乎相同的问题,并且这个话题似乎以各种形式出现相当频繁,我只能为我的迟钝道歉,并再次要求有人解释为什么下面的查询会返回所有三个上面的记录,而不是我想要的,只有 ID 为 4 和 6 的记录。
这与我尝试基于包含 NULL 的列加入有关吗?
SELECT
rate.*,
newest.id
FROM rate
LEFT JOIN rate AS newest ON(
rate.client_company = newest.client_company
AND rate.client_contact = newest.client_contact
AND rate.client_group = newest.client_group
AND rate.role= newest.role
AND newest.date_from > rate.date_from
)
WHERE newest.id IS NULL