我有結構...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