栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

oracle为彼此之间在一分钟之内出售的商品选择日期

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

oracle为彼此之间在一分钟之内出售的商品选择日期

您可以使用

LAG
/
LEAD
解析函数比较上一行和下一行,以确定它们是否在当前行的一分钟之内:

SELECt location,       LISTAGG( equipment_type, ',' )         WITHIN GROUP ( ORDER BY sold_date )         AS equipment_types,       LISTAGG( TO_CHAr( sold_date, 'HH24:MI:SS' ), ',' )         WITHIN GROUP ( ORDER BY sold_date )         AS sold_datesFROM   (  SELECt num_cars,         equipment_type,         location,         sold_date,         CASE         WHEN within_minute_of_prev = 1 OR within_minute_of_next = 1         THEN SUM(     CASE     WHEN within_minute_of_prev = 0 AND within_minute_of_next = 1     THEN 1     ELSE 0     END   ) OVER ( PARTITION BY location ORDER BY sold_date )         END AS grp  FROM   (    SELECt c.*,CASEWHEN ( sold_date       - LAG( sold_date ) OVER ( PARTITION BY location ORDER BY sold_date )     ) DAY TO SECOND     <= INTERVAL '1' MINUTETHEN 1ELSE 0END AS within_minute_of_prev,CASEWHEN ( LEAD( sold_date ) OVER ( PARTITION BY location ORDER BY sold_date )       - sold_date     ) DAY TO SECOND     <= INTERVAL '1' MINUTETHEN 1ELSE 0END AS within_minute_of_next    FROM   car_sales c  ))WHERe grp IS NOT NULLGROUP BY location, grp;

其中,对于您的示例数据:

CREATE TABLE CAR_SALES ( NUM_CARS, EQUIPMENT_TYPE, LOCATION, SOLD_DATE ) AS  SELECt   8, 'Rovers',   'coventry',   DATE '2019-09-07' + INTERVAL '10:00:12' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   1, 'Rovers',   'coventry',   DATE '2019-09-07' + INTERVAL '10:00:45' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   9, 'Jaguars',  'coventry',   DATE '2019-09-07' + INTERVAL '06:00:00' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   7, 'Rovers',   'leamington', DATE '2019-08-30' + INTERVAL '13:10:13' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt  10, 'Trans Am', 'leamington', DATE '2019-08-30' + INTERVAL '09:00:00' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   2, 'Trans Am', 'leamington', DATE '2019-08-30' + INTERVAL '13:10:48' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   8, 'Rovers',   'coventry',   DATE '2019-09-06' + INTERVAL '18:00:00' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   4, 'Rovers',   'leamington', DATE '2019-09-06' + INTERVAL '09:00:00' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt 100, 'Trans Am', 'leamington', DATE '2019-09-06' + INTERVAL '08:59:45' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   1, 'corvette', 'leamington', DATE '2019-09-06' + INTERVAL '09:00:10' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   2, 'Toyota',   'coventry',   DATE '2019-09-06' + INTERVAL '10:00:00' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt  15, 'Rovers',   'coventry',   DATE '2019-09-07' + INTERVAL '11:05:00' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   2, 'Jaguars',  'coventry',   DATE '2019-09-07' + INTERVAL '17:02:07' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   3, 'Trans Am', 'leamington', DATE '2019-08-30' + INTERVAL '13:10:25' HOUR TO SECOND FROM DUAL;

输出:

位置| EQUIPMENT_TYPES | SOLD_DATES  :--------- | :----------------------- | :-------------------------考文垂| 流浪者,流浪者| 10:00:12,10:00:45  利明顿| 流浪者,Trans Am,Trans Am | 13:10:13,13:10:25,13:10:48利明顿| Trans Am,流浪者,护卫舰| 08:59:45,09:00:00,09:00:10

db
<>在这里拨弄


更新

一个简短得多的Oracle 12c查询使用

MATCH_RECOGNIZE

SELECt location,       LISTAGG( equipment_type, ',' )         WITHIN GROUP ( ORDER BY sold_date )         AS equipment_types,       LISTAGG( TO_CHAr( sold_date, 'HH24:MI:SS' ), ',' )         WITHIN GROUP ( ORDER BY sold_date )         AS sold_timesFROM   car_salesMATCH_RECOGNIZE (   PARTITION BY location   ORDER BY sold_date   MEASURES        MATCH_NUMBER() AS mno   ALL ROWS PER MATCH   PATTERN (A B+)   DEFINE      B AS B.sold_date <= PREV(B.sold_date) + interval '1' minute)GROUP BY location, mnoORDER BY location, mno;

其中,对于测试数据:

CREATE TABLE CAR_SALES ( NUM_CARS, EQUIPMENT_TYPE, LOCATION, SOLD_DATE ) AS  SELECt   8, 'Rovers',   'coventry',   DATE '2019-09-07' + INTERVAL '10:00:12' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   1, 'Rovers',   'coventry',   DATE '2019-09-07' + INTERVAL '10:00:45' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   3, 'Rovers',   'coventry',   DATE '2019-09-07' + INTERVAL '10:01:15' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   3, 'Rovers',   'coventry',   DATE '2019-09-07' + INTERVAL '10:01:30' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   9, 'Jaguars',  'coventry',   DATE '2019-09-07' + INTERVAL '06:00:00' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   7, 'Rovers',   'leamington', DATE '2019-08-30' + INTERVAL '13:10:13' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt  10, 'Trans Am', 'leamington', DATE '2019-08-30' + INTERVAL '09:00:00' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   2, 'Trans Am', 'leamington', DATE '2019-08-30' + INTERVAL '13:10:48' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   8, 'Rovers',   'coventry',   DATE '2019-09-06' + INTERVAL '18:00:00' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   4, 'Rovers',   'leamington', DATE '2019-09-06' + INTERVAL '09:00:00' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt 100, 'Trans Am', 'leamington', DATE '2019-09-06' + INTERVAL '08:59:45' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   1, 'corvette', 'leamington', DATE '2019-09-06' + INTERVAL '09:00:10' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   2, 'Toyota',   'coventry',   DATE '2019-09-06' + INTERVAL '10:00:00' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt  15, 'Rovers',   'coventry',   DATE '2019-09-07' + INTERVAL '11:05:00' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   2, 'Jaguars',  'coventry',   DATE '2019-09-07' + INTERVAL '17:02:07' HOUR TO SECOND FROM DUAL UNIOn ALL  SELECt   3, 'Trans Am', 'leamington', DATE '2019-08-30' + INTERVAL '13:10:25' HOUR TO SECOND FROM DUAL;

输出:

``` LOCATIONEQUIPMENT_TYPESSOLD_DATEScoventryRovers,Rovers10:00:12,10:00:45leamingtonRovers,Trans Am,Trans Am13:10:13,13:10:25,13:10:48leamingtonTrans Am,Rovers,corvette08:59:45,09:00:00,09:00:10

db
<>在这里拨弄



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634537.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号