Sql 如何在Listag Oracle 12c上导出最大日期
Oracle 12c安装。我在组织OracleSql 如何在Listag Oracle 12c上导出最大日期,sql,oracle,date,max,listagg,Sql,Oracle,Date,Max,Listagg,Oracle 12c安装。我在组织OracleListag()以显示查询中的“车辆计数”列以仅显示每个位置的max(库存日期)数据时遇到问题 我想创建一个视图来汇总结果: create or replace view car_inventory_vw as select max(a.inventory_date) as max_date, a.location,LISTAGG(a.COUNT_CARS||' '||a.EQUIPMENT_TYPE,',') within GROUP (ORDE
Listag()
以显示查询中的“车辆计数”列以仅显示每个位置的max(库存日期)数据时遇到问题
我想创建一个视图来汇总结果:
create or replace view car_inventory_vw as
select max(a.inventory_date) as max_date,
a.location,LISTAGG(a.COUNT_CARS||' '||a.EQUIPMENT_TYPE,',')
within GROUP (ORDER BY a.equipment_type) as equipment_list
from car_equipment a
group by a.location;
创建表并插入测试行,安装在Windows上的Oracle 12c上
CREATE TABLE "CAR_EQUIPMENT"
( "COUNT_CARS" NUMBER(10,0),
"EQUIPMENT_TYPE" VARCHAR2(100 BYTE),
"LOCATION" VARCHAR2(500 BYTE),
"INVENTORY_DATE" DATE)
SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;
INSERT INTO "CAR_EQUIPMENT" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, INVENTORY_DATE) VALUES ('8', 'Rovers', 'coventry', TO_DATE('2019-09-07 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CAR_EQUIPMENT" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, INVENTORY_DATE) VALUES ('9', 'Jaguars', 'coventry', TO_DATE('2019-09-07 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CAR_EQUIPMENT" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, INVENTORY_DATE) VALUES ('7', 'Rovers', 'leamington', TO_DATE('2019-08-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CAR_EQUIPMENT" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, INVENTORY_DATE) VALUES ('10','Trans Am', 'leamington', TO_DATE('2019-08-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CAR_EQUIPMENT" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, INVENTORY_DATE) VALUES ('8', 'Rovers', 'coventry', TO_DATE('2019-01-07 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CAR_EQUIPMENT" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, INVENTORY_DATE) VALUES ('4', 'Rovers', 'leamington', TO_DATE('2019-01-08 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
结果应为按位置列出的最大(库存日期)库存清单:
MAX(INVENTORY_DATE) LOCATION INVENTORY_LIST
-------------------- ----------- -------------------------
2019-08-30 leamington 10 Trans AM, 7 Rovers
2019-09-07 coventry 8 Rovers, 9 Jaguars
我遇到了一个简单的问题,请告知我如何才能获得仅按位置创建的最长日期数据列表
提前谢谢大家,,
Gilly您可以分两步进行:
- 首先,在子查询中使用
RANK()
- 然后,在外部查询中使用聚合,并使用
listag()
SELECT
inventory_date max_inventory_date,
location,
LISTAGG(count_cars || ' ' || equipment_type, ', ')
WITHIN GROUP (ORDER BY equipment_type) inventory_list
FROM (
SELECT c.*, RANK() OVER(PARTITION BY location ORDER BY inventory_date DESC) rn
FROM car_equipment c
) x
WHERE rn = 1
GROUP BY inventory_date, location;
数据:
清点车辆|设备|类型|位置|库存|日期
---------: | :------------- | :--------- | :-------------
8 |路虎|考文垂| 19年9月7日
9 |美洲虎|考文垂| 19年9月7日
7 |路虎|利明顿| 19年8月30日
19年8月30日上午10时至利明顿
8 |路虎|考文垂| 19年1月7日
4 |路虎|利明顿| 19年1月8日
结果:
MAX_INVENTORY_DATE | LOCATION | INVENTORY_LIST
:----------------- | :--------- | :--------------------
30-AUG-19 | leamington | 7 Rovers, 10 Trans Am
07-SEP-19 | coventry | 9 Jaguars, 8 Rovers
最大库存|日期|位置|库存|清单
:----------------- | :--------- | :--------------------
19年8月30日|利明顿| 7路虎,上午10时
19年9月7日|考文垂| 9辆美洲虎,8辆路虎
如何显示某个日期而不是最大日期的协同数据? MAX_INVENTORY_DATE | LOCATION | INVENTORY_LIST :----------------- | :--------- | :-------------------- 30-AUG-19 | leamington | 7 Rovers, 10 Trans Am 07-SEP-19 | coventry | 9 Jaguars, 8 Rovers