【发布时间】:2020-10-11 09:11:02
【问题描述】:
有一个包含 3 种记录类型的位置表(见下文)。我只需要 SELECT record_type = 'G' 行。
我想将数据包装在一个循环中(即 5 次),但是如何通过 location_id 随机打乱整个行,以便它们在循环的每次迭代中以不同的顺序出现?也许,将行粘贴到一个数组中并打乱数组?
注意,我不想打乱列,我希望行保持完整。未来可能会增加更多地点。
CREATE TABLE locations AS
SELECT level AS location_id,
'Door ' || level AS location_name,
CASE round(dbms_random.value(1,3))
WHEN 1 THEN 'A'
WHEN 2 THEN 'T'
WHEN 3 THEN 'G'
END AS location_type
FROM dual
CONNECT BY level <= 25;
SELECT * from tour_detail
Order by tour_id, tour_time
TOUR_ID TOUR_TIME LOCATION_ID
1 06212020 00:10:25 2
1 06212020 00:21:05 18
1 06212020 00:30:33 11
1 06212020 00:40:51 17
1 06212020 00:52:13 4
1 06212020 01:01:42 2
1 06212020 01:07:52 11
我们有一个门禁系统,当您滑动卡片时,它会以 MMDDYYY HH24:MI:SS 格式记录 card_num、location_id、access_date。
有些人想创建一个巡视系统。这会将 access_date 与 tour_detail 详细信息日期进行比较。如果在某个标准内说 + 或 - 2 分钟,这意味着守卫准时,如果 GT 或 LT 2 分钟,我们记录早或晚,如果 GT 或 LT 5 分钟或没有 access_history 记录,我们记录未出现。
我被要求汇总一些测试数据。如您所见,tour_detail 记录包含 MMDDYYYY HH24:MI:SS,所以我正在考虑将 tour_detail 记录更改为间隔小时到分钟,但我对此几乎没有经验。
【问题讨论】:
-
“随机洗牌”和“循环的每次迭代以不同的顺序”不能同时实现。通过随机洗牌,您可以获得两次或多次相同的订单。您想遍历所有可能的订单组合一次吗?还是您只是想要每次随机排序?
-
不,我只想随机播放,不需要每个组合都不同。我想要这个 怎么能这样做: BEGIN FOR l_counter IN 1..5 LOOP For 1 to each location.count Loop Print location_id End loop 随机打乱位置表中的所有记录 END LOOP;结束;