亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

SQL面試題:求時間差之和(有重復不計)

2020-01-18 20:39:30
字體:
來源:轉載
供稿:網友

面試某某公司BI崗位的時候,面試題中的一道sql題,咋看一下很簡單,寫的時候發現自己缺乏總結,沒有很快的寫出來。

題目如下:

求每個品牌的促銷天數

表sale為促銷營銷表,數據中存在日期重復的情況,例如id為1的end_date為20180905,id為2的start_date為20180903,即id為1和id為2的存在重復的銷售日期,求出每個品牌的促銷天數(重復不算)

表結果如下:

+------+-------+------------+------------+| id | brand | start_date | end_date |+------+-------+------------+------------+| 1 | nike | 2018-09-01 | 2018-09-05 || 2 | nike | 2018-09-03 | 2018-09-06 || 3 | nike | 2018-09-09 | 2018-09-15 || 4 | oppo | 2018-08-04 | 2018-08-05 || 5 | oppo | 2018-08-04 | 2018-08-15 || 6 | vivo | 2018-08-15 | 2018-08-21 || 7 | vivo | 2018-09-02 | 2018-09-12 |+------+-------+------------+------------+

最終結果應為

brand all_days
nike 13
oppo 12
vivo 18

建表語句

-- ------------------------------ Table structure for sale-- ----------------------------DROP TABLE IF EXISTS `sale`;CREATE TABLE `sale` ( `id` int(11) DEFAULT NULL, `brand` varchar(255) DEFAULT NULL, `start_date` date DEFAULT NULL, `end_date` date DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of sale-- ----------------------------INSERT INTO `sale` VALUES (1, 'nike', '2018-09-01', '2018-09-05');INSERT INTO `sale` VALUES (2, 'nike', '2018-09-03', '2018-09-06');INSERT INTO `sale` VALUES (3, 'nike', '2018-09-09', '2018-09-15');INSERT INTO `sale` VALUES (4, 'oppo', '2018-08-04', '2018-08-05');INSERT INTO `sale` VALUES (5, 'oppo', '2018-08-04', '2018-08-15');INSERT INTO `sale` VALUES (6, 'vivo', '2018-08-15', '2018-08-21');INSERT INTO `sale` VALUES (7, 'vivo', '2018-09-02', '2018-09-12');

方式1:

利用自關聯下一條記錄的方法

select brand,sum(end_date-befor_date+1) all_days from  ( select s.id ,  s.brand ,  s.start_date ,  s.end_date ,   if(s.start_date>=ifnull(t.end_date,s.start_date) ,s.start_date,DATE_ADD(t.end_date,interval 1 day) ) as befor_date from sale s left join (select id+1 as id ,brand,end_date from sale) t on s.id = t.id and s.brand = t.brand order by s.id )tmp group by brand

運行結果

+-------+---------+| brand | all_day |+-------+---------+| nike |  13 || oppo |  12 || vivo |  18 |+-------+---------+

該方法對本題中的表格有效,但對于有id不連續的品牌的記錄時不一定適用。

方式2:

SELECT a.brand,SUM( CASE   WHEN a.start_date=b.start_date AND a.end_date=b.end_date  AND NOT EXISTS(  SELECT *  FROM sale c LEFT JOIN sale d ON c.brand=d.brand    WHERE d.brand=a.brand   AND c.start_date=a.start_date   AND c.id<>d.id    AND (d.start_date BETWEEN c.start_date AND c.end_date AND d.end_date>c.end_date   OR   c.start_date BETWEEN d.start_date AND d.end_date AND c.end_date>d.end_date)    )    THEN (a.end_date-a.start_date+1)   WHEN (a.id<>b.id AND b.start_date BETWEEN a.start_date AND a.end_date AND b.end_date>a.end_date ) THEN (b.end_date-a.start_date+1)  ELSE 0 END  ) AS all_days FROM sale a JOIN sale b ON a.brand=b.brand GROUP BY a.brand

運行結果

+-------+----------+| brand | all_days |+-------+----------+| nike |  13 || oppo |  12 || vivo |  18 |+-------+----------+

其中條件

d.start_date BETWEEN c.start_date AND c.end_date AND d.end_date>c.end_date   OR c.start_date BETWEEN d.start_date AND d.end_date AND c.end_date>d.end_date

可以換成

c.start_date < d.end_date AND (c.end_date > d.start_date)

結果同樣正確

用分析函數同樣可行的,自己電腦暫時沒裝oracle,用的mysql寫的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91视频88av| 国产在线播放不卡| 日韩免费高清在线观看| 久久99国产精品久久久久久久久| 伊人久久大香线蕉av一区二区| 狠狠久久五月精品中文字幕| 亚洲人成伊人成综合网久久久| 欧美日韩中文字幕在线| 日韩中文第一页| 国产精品成人av在线| 亚洲欧洲中文天堂| 色综合久久精品亚洲国产| 午夜精品美女自拍福到在线| 亚洲欧美资源在线| 成人精品久久av网站| 欧美日韩成人在线观看| 91中文字幕在线| 九九精品视频在线观看| 欧美日韩国产激情| 在线观看日韩视频| 国产精品久久av| 91探花福利精品国产自产在线| 日本国产欧美一区二区三区| 欧美夜福利tv在线| 4444欧美成人kkkk| 九九精品视频在线| 91精品视频在线免费观看| 日韩精品中文字幕有码专区| 久久久久久久久91| 久久久免费观看| 日韩在线观看免费av| 亚洲欧美色婷婷| 国产精彩精品视频| 欧美极品少妇xxxxⅹ裸体艺术| 97热精品视频官网| 欧美中文字幕在线| 亚洲国产精品99| 岛国av在线不卡| 97超级碰碰人国产在线观看| 久久99精品国产99久久6尤物| 18久久久久久| 亚洲女人天堂色在线7777| 一区三区二区视频| 久久精品国产96久久久香蕉| 日韩精品日韩在线观看| 国产91色在线播放| 日韩精品视频在线观看免费| 久久综合久久美利坚合众国| 国产高清在线不卡| 国产欧美一区二区三区久久人妖| 国产视频精品xxxx| 91精品国产高清久久久久久| 国产亚洲精品一区二区| 亚洲国产精品va在看黑人| 97国产精品人人爽人人做| 国产福利精品在线| 91精品久久久久久久久青青| 国自产精品手机在线观看视频| 国产91精品久久久久| 日韩电影免费在线观看中文字幕| 国产精品视频中文字幕91| 久久久久久久97| 4438全国亚洲精品在线观看视频| 亚洲女人天堂成人av在线| 九九热精品视频| 亚洲激情电影中文字幕| 精品久久久久久中文字幕| 欧美老女人在线视频| 中文字幕国产亚洲2019| 欧美日韩在线免费| 亚洲国产成人精品久久久国产成人一区| 亚洲精品免费av| 欧美精品videosex牲欧美| 亚洲第一免费播放区| 久久视频在线免费观看| 性欧美xxxx交| 影音先锋欧美精品| 成人在线国产精品| 91九色视频在线| 欧美成人激情视频免费观看| 成人免费直播live| 成人欧美一区二区三区黑人| 国产91色在线|免| 久久精品视频在线播放| 欧美一级片久久久久久久| 亚洲黄色在线看| 日韩欧美中文在线| 日本一区二区三区四区视频| 色偷偷888欧美精品久久久| 国产999精品视频| 国产精品久久久久久久久免费看| 国产主播精品在线| 欧美在线亚洲一区| 亚洲欧美第一页| 亚洲色图av在线| 欧美美最猛性xxxxxx| 91欧美日韩一区| 亚洲一区av在线播放| 日韩欧美精品网站| 欧美极品在线播放| 欧美在线xxx| 日韩精品极品在线观看播放免费视频| 国产精品私拍pans大尺度在线| 亚洲天堂网站在线观看视频| 最近2019中文字幕一页二页| 6080yy精品一区二区三区| 不卡av电影在线观看| 91精品中文在线| 在线观看国产精品日韩av| 国产亚洲精品高潮| 国产日韩欧美中文| 欧美极品在线播放| 色噜噜狠狠色综合网图区| 中文字幕欧美日韩va免费视频| 91情侣偷在线精品国产| 国产精品偷伦视频免费观看国产| 国产偷国产偷亚洲清高网站| 精品久久久久久久久久ntr影视| 亚洲国产日韩欧美在线99| 亚洲成在人线av| 欧美日韩亚洲系列| 成人性生交大片免费看小说| 久久艳片www.17c.com| 国产精品久久久久久久久久久不卡| 国产偷亚洲偷欧美偷精品| 九九热99久久久国产盗摄| 亚洲无av在线中文字幕| 国产乱人伦真实精品视频| 国产精品一二三在线| 26uuu亚洲国产精品| 日韩精品一区二区三区第95| 日韩美女av在线| 中文字幕精品在线视频| 亚洲精品久久久久中文字幕二区| 国产成人一区二区| 成人有码视频在线播放| 久久久爽爽爽美女图片| 国产精品稀缺呦系列在线| 精品国产欧美成人夜夜嗨| www亚洲欧美| 国产精品视频内| 欧美夜福利tv在线| 久久理论片午夜琪琪电影网| 亚洲人成网站777色婷婷| 日韩电影网在线| 亚洲美女视频网| 久久国产精品首页| 欧美高清视频在线| 亚洲精品视频久久| 日韩在线视频国产| 国产精品高潮呻吟久久av黑人| 91亚洲精华国产精华| 97欧美精品一区二区三区| 懂色aⅴ精品一区二区三区蜜月| 日韩av一区在线观看| 国精产品一区一区三区有限在线| 欧美一乱一性一交一视频| 欧美日韩高清在线观看| 中文欧美日本在线资源| 日韩福利伦理影院免费| 亚洲精品按摩视频| 亚洲电影免费观看高清完整版| 国产精品网红福利| 日韩在线www|