1
이벤트 (예 : 록 콘서트)에 GPS 좌표를 저장하는 테이블이 있습니다.여러 행의 날짜를 하나의 집합으로 통합합니다.
그것은 다음과 같습니다
sequence | event_id | location_id | device_number | timestamp | latitude | longitude | event
--------------------------------------------------------------------------------------------------------------------------------
1 | 101 | 2201 | 220 | 2013-10-29 05:01:00 | 37.757196 | -122.441681 | enter
2 | 101 | 2202 | 220 | 2013-10-29 05:02:00 | 37.757196 | -122.441681 | NULL
3 | 101 | 2203 | 220 | 2013-10-29 05:03:00 | 37.757196 | -122.441681 | NULL
4 | 101 | 2204 | 220 | 2013-10-29 05:04:00 | 37.757196 | -122.441681 | NULL
5 | 101 | 2205 | 220 | 2013-10-29 05:05:00 | 37.757196 | -122.441681 | NULL
6 | 101 | 2206 | 220 | 2013-10-29 05:06:00 | 37.757196 | -122.441681 | NULL
7 | 101 | 2207 | 220 | 2013-10-29 05:07:00 | 37.757196 | -122.441681 | exit
8 | 102 | 2208 | 220 | 2013-10-29 05:08:00 | 38.865221 | -123.920201 | enter
9 | 102 | 2209 | 220 | 2013-10-29 05:09:00 | 38.865221 | -123.920201 | NULL
10 | 102 | 2210 | 220 | 2013-10-29 05:10:00 | 38.865221 | -123.920201 | NULL
11 | 102 | 2211 | 220 | 2013-10-29 05:11:00 | 38.865221 | -123.920201 | NULL
12 | 102 | 2212 | 220 | 2013-10-29 05:12:00 | 38.865221 | -123.920201 | NULL
13 | 102 | 2213 | 220 | 2013-10-29 05:13:00 | 38.865221 | -123.920201 | NULL
14 | 102 | 2214 | 220 | 2013-10-29 05:14:00 | 38.865221 | -123.920201 | exit
15 | 101 | 2215 | 220 | 2013-10-29 05:15:00 | 37.757196 | -122.441681 | enter
16 | 101 | 2216 | 220 | 2013-10-29 05:16:00 | 37.757196 | -122.441681 | NULL
17 | 101 | 2217 | 220 | 2013-10-29 05:17:00 | 37.757196 | -122.441681 | NULL
18 | 101 | 2218 | 220 | 2013-10-29 05:18:00 | 37.757196 | -122.441681 | NULL
19 | 101 | 2219 | 220 | 2013-10-29 05:19:00 | 37.757196 | -122.441681 | NULL
20 | 101 | 2220 | 220 | 2013-10-29 05:20:00 | 37.757196 | -122.441681 | NULL
21 | 101 | 2221 | 220 | 2013-10-29 05:21:00 | 37.757196 | -122.441681 | exit
22 | 101 | 2222 | 330 | 2013-10-29 05:15:00 | 37.757197 | -122.441682 | enter
23 | 101 | 2223 | 330 | 2013-10-29 05:16:00 | 37.757197 | -122.441682 | NULL
24 | 101 | 2224 | 330 | 2013-10-29 05:17:00 | 37.757197 | -122.441682 | NULL
25 | 101 | 2225 | 330 | 2013-10-29 05:18:00 | 37.757197 | -122.441682 | NULL
26 | 101 | 2226 | 330 | 2013-10-29 05:19:00 | 37.757197 | -122.441682 | NULL
27 | 101 | 2227 | 330 | 2013-10-29 05:20:00 | 37.757197 | -122.441682 | exit
device_number
는 사용자가 소유 한 특정 GPS 장치입니다.event
열은 특정 GPSdevice_number
이 자신의 지리적 좌표를 기반으로 event_id에서 걸었거나 벗어 났을 때를 나타냅니다.
나는 테이블 위의 데이터가 billable_times
라고 요약하고 싶습니다 :
id | event_id | device_number | begin_time | end_time | duration (minutes)
----------------------------------------------------------------------------------------------
1 | 101 | 220 | 2013-10-29 05:01:00 | 2013-10-29 05:07:00 | 6
2 | 102 | 220 | 2013-10-29 05:08:00 | 2013-10-29 05:14:00 | 6
3 | 101 | 220 | 2013-10-29 05:15:00 | 2013-10-29 05:21:00 | 6
4 | 101 | 330 | 2013-10-29 05:15:00 | 2013-10-29 05:20:00 | 5
가 어떻게 만 begin_time
와 end_time
단일 행으로 타임 스탬프의 범위를 저장할 수? 내가 MySQL을 사용하고 있지만 SQL 맛이 허용됩니다
CREATE TABLE `intersections` (
`sequence` int(11) NOT NULL AUTO_INCREMENT,
`event_id` int(11) DEFAULT NULL,
`location_id` int(11) NOT NULL,
`device_number` varchar(255) NOT NULL,
`timestamp` datetime NOT NULL,
`latitude` decimal(20,15) NOT NULL,
`longitude` decimal(20,15) NOT NULL,
`event` varchar(255) DEFAULT NULL,
PRIMARY KEY (`sequence`),
UNIQUE KEY `index_intersections_on_location_id_and_event_id` (`location_id`,`event_id`)
);
INSERT INTO `intersections` (`sequence`, `event_id`, `location_id`, `device_number`, `timestamp`, `latitude`, `longitude`, `event`)
VALUES
(1, 101, 2201, '220', '2013-10-29 05:01:00', 37.757196, -122.441681, 'enter'),
(2, 101, 2202, '220', '2013-10-29 05:02:00', 37.757196, -122.441681, NULL),
(3, 101, 2203, '220', '2013-10-29 05:03:00', 37.757196, -122.441681, NULL),
(4, 101, 2204, '220', '2013-10-29 05:04:00', 37.757196, -122.441681, NULL),
(5, 101, 2205, '220', '2013-10-29 05:05:00', 37.757196, -122.441681, NULL),
(6, 101, 2206, '220', '2013-10-29 05:06:00', 37.757196, -122.441681, NULL),
(7, 101, 2207, '220', '2013-10-29 05:07:00', 37.757196, -122.441681, 'exit'),
(8, 102, 2208, '220', '2013-10-29 05:08:00', 37.757196, -122.441681, 'enter'),
(9, 102, 2209, '220', '2013-10-29 05:09:00', 37.757196, -122.441681, NULL),
(10, 102, 2210, '220', '2013-10-29 05:10:00', 37.757196, -122.441681, NULL),
(11, 102, 2211, '220', '2013-10-29 05:11:00', 37.757196, -122.441681, NULL),
(12, 102, 2212, '220', '2013-10-29 05:12:00', 37.757196, -122.441681, NULL),
(13, 102, 2213, '220', '2013-10-29 05:13:00', 37.757196, -122.441681, NULL),
(14, 102, 2214, '220', '2013-10-29 05:14:00', 37.757196, -122.441681, 'exit'),
(15, 101, 2215, '220', '2013-10-29 05:15:00', 37.757196, -122.441681, 'enter'),
(16, 101, 2216, '220', '2013-10-29 05:16:00', 37.757196, -122.441681, NULL),
(17, 101, 2217, '220', '2013-10-29 05:17:00', 37.757196, -122.441681, NULL),
(18, 101, 2218, '220', '2013-10-29 05:18:00', 37.757196, -122.441681, NULL),
(19, 101, 2219, '220', '2013-10-29 05:19:00', 37.757196, -122.441681, NULL),
(20, 101, 2220, '220', '2013-10-29 05:20:00', 37.757196, -122.441681, NULL),
(21, 101, 2221, '220', '2013-10-29 05:21:00', 37.757196, -122.441681, 'exit'),
(22, 101, 2222, '330', '2013-10-29 05:15:00', 37.757196, -122.441681, 'enter'),
(23, 101, 2223, '330', '2013-10-29 05:16:00', 37.757196, -122.441681, NULL),
(24, 101, 2224, '330', '2013-10-29 05:17:00', 37.757196, -122.441681, NULL),
(25, 101, 2225, '330', '2013-10-29 05:18:00', 37.757196, -122.441681, NULL),
(26, 101, 2226, '330', '2013-10-29 05:19:00', 37.757196, -122.441681, NULL),
(27, 101, 2227, '330', '2013-10-29 05:20:00', 37.757196, -122.441681, 'exit');
CREATE TABLE `billable_times` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`event_id` int(11) DEFAULT NULL,
`device_number` varchar(255) DEFAULT NULL,
`begin_time` datetime DEFAULT NULL,
`end_time` datetime DEFAULT NULL,
`duration` float DEFAULT NULL,
PRIMARY KEY (`id`)
);
: 여기
는 몇 가지 유용한 테이블 작성 스크립트입니다. (나는 이것을 MySQL로 번역하려고 노력할 것이다 :).
아, SQL 변수를 사용해보십시오. 내가 왜 그렇게 생각하지 않았어? 이것은 매우 독창적이고 아름답습니다. 고마워, 루시. – Glenn