我有结构...Mysql的需要选择与多个字段没有dublicats比较
CREATE TABLE IF NOT EXISTS `deals` (
`deal_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`fromCity` varchar(75) NOT NULL DEFAULT ' ',
`toCity` varchar(75) NOT NULL DEFAULT '',
`outbound` date NOT NULL,
`inbound` date NOT NULL,
`airline` varchar(50) NOT NULL,
`CPM` decimal(8,2) unsigned NOT NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`deal_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=719971 ;
INSERT INTO `deals` (`deal_id`, `fromCity`, `toCity`, `outbound`, `inbound`, `airline`, `CPM`, `created`) VALUES
(719968, 'Hong Kong', 'Taegu', '2017-07-23', '2017-07-17', 'Air China', '4.80', '2017-07-02 05:48:05'),
(719967, 'Hong Kong', 'Taegu', '2017-07-23', '2017-07-17', 'Air China', '4.81', '2017-07-02 05:48:04'),
(719966, 'Hong Kong', 'Montreal', '2017-07-23', '2017-07-18', 'Air China', '4.70', '2017-07-02 05:48:04'),
(719965, 'Hong Kong', 'Montreal', '2017-07-23', '2017-07-18', 'Air China', '4.75', '2017-07-02 05:48:04'),
(719964, 'Busan', 'Saipan', '2017-07-23', '2017-07-19', 'Air China', '4.60', '2017-07-02 05:48:04'),
(719969, 'Hong Kong', 'Taegu', '2017-07-23', '2017-07-17', 'Air China', '4.82', '2017-07-02 05:49:04'),
(719970, 'Hong Kong', 'Saipan', '2017-07-23', '2017-07-17', 'Jeju Air', '4.85', '2017-07-02 05:49:04');
单个表“交易”和7分的记录,我需要选择,没有基于dublicats所有记录记录从城市到城市,出站和入站等几个领域。
所以,我想选择每一行,但如果选定的行有一个dublicats具有相同fromCity,toCity,出站和入站值,我只需要从dublicats中只选择第一个或只有最后一个。
这是我使用获得的所有记录与航空公司=“中国国航”主查询:因为只有六行一直需要航空公司
SELECT
SQL_CALC_FOUND_ROWS fromCity, toCity, inbound, outbound, airline, CPM, created
FROM
deals
WHERE
airline LIKE '%Air China%'
ORDER BY
CPM
该查询返回6行从7。 但是,您可以在结果中看到3个来自城市,城市,入站,出站字段的公共信息。 all records with dublicats and neede airline
我需要从那里只选择3个recors。这是我需要的记录。 Needed rows. First do not have a dublicats. Second have a one dublicat. And third have a two dublicats.
而且我尝试使用这个查询而不dublicats选择...
SELECT
minid, deals.deal_id,
deals.fromCity, deals.toCity, deals.inbound, deals.outbound,
deals.airline, deals.CPM, deals.created
FROM
deals
inner join
(select
min(deal_id) minid, deal_id,
fromCity, toCity, inbound, outbound, airline, CPM, created
from deals
group by fromCity, toCity, inbound, outbound
having count(1) > 1)
as duplicates
on (duplicates.fromCity = deals.fromCity
and duplicates.toCity = deals.toCity
and duplicates.inbound = deals.inbound
and duplicates.outbound = deals.outbound
and duplicates.deal_id <> deals.deal_id)
WHERE
deals.airline LIKE '%Air China%'
ORDER BY
CPM
但此查询只行有一个dublicats返回。此外,如果行没有单个dublicats,它将返回几行而不是dublicats。
期望的结果应该是如下:
+---------+-----------+----------+------------+------------+-----------+------+---------------------+
| deal_id | fromCity | toCity | outbound | inbound | airline | CPM | created |
+---------+-----------+----------+------------+------------+-----------+------+---------------------+
| 719964 | Busan | Saipan | 2017-07-23 | 2017-07-19 | Air China | 4.60 | 2017-07-02 05:48:04 |
| 719966 | Hong Kong | Montreal | 2017-07-23 | 2017-07-18 | Air China | 4.70 | 2017-07-02 05:48:04 |
| 719967 | Hong Kong | Taegu | 2017-07-23 | 2017-07-17 | Air China | 4.81 | 2017-07-02 05:48:04 |
+---------+-----------+----------+------------+------------+-----------+------+---------------------+
谢谢你的帮助。带着敬意。
将所期望的结果是什么样的 – Strawberry
我想你问这个? https://i.stack.imgur.com/rwqwc.png – Yegor
“只有首先还是最后一个”? – Strawberry