sách gpt4 ăn đã đi

Cách chia giờ giữa tối thiểu (ngày) và tối đa (ngày) thành các phần 4 giờ trong máy chủ MySQL

In lại Tác giả: Walker 123 Thời gian cập nhật: 29-11-2023 06:27:04 30 4
mua khóa gpt4 giày nike

Bảng của tôi:

TẠO BẢNG `tbdata` (
`ID` INT(10) KHÔNG NULL TỰ ĐỘNG TĂNG,
`PatientID` INT(10) KHÔNG NULL,
`RecordDate` DATETIME KHÔNG NULL,
KHÓA CHÍNH (`ID`)
) ENGINE=INNODB AUTO_INCREMENT=1 BỘ KÝ TỰ MẶC ĐỊNH=latin1;

Dữ liệu trong bảng trông như thế này:

ID ID bệnh nhân Ngày ghi chép
132 172116 2019—11—15 13:43:45
133 172816 2019—11—15 13:43:55
134 172816 2019—11—15 13:44:06
135 172816 2019—11—15 13:44:16
136 172816 2019—11—15 13:44:27
137 172816 2019—11—15 13:44:38
138 172816 2019—11—15 13:44:48
139 172816 2019—11—15 13:44:59
140 172816 2019—11—15 13:45:09
141 172816 2019—11—15 13:45:20
142 172816 2019—11—15 13:45:31
143 172816 2019—11—15 13:45:41
144 172816 2019—11—15 13:45:52
145 172816 2019—11—15 13:46:02
146 172816 2019—11—15 13:46:13
147 172816 2019—11—15 13:46:24
148 172816 2019—11—15 13:46:35
149 172816 2019—11—15 13:46:46
150 172816 2019—11—15 13:46:56
151 172816 2019—11—15 13:47:07
152 172816 2019—11—15 13:47:19
153 172816 2019—11—15 13:47:30
154 172816 2019—11—15 13:47:43
155 172816 2019—11—15 13:47:54
156 172816 2019—11—15 13:48:04
157 172816 2019—11—15 13:48:15
158 172816 2019—11—15 14:48:25
159 172816 2019—11—15 17:48:36
160 172816 2019—11—15 18:48:47
161 172816 2019—11—15 20:48:57
162 172816 2019—11—15 22:49:08
163 172816 2019—11—15 23:49:18

Kết quả mong muốn như sau:

Khung giờ 4 giờ:
bắt đầu từ min(RecordDate)
2019-11-15 13:00:00 - 2019-11-15 17:00:00
2019-11-15 17:00:00 - 2019-11-15 21:00:00
2019-11-15 21:00:00 - 2019-11-16 01:00:00
... cho đến max(RecordDate)

câu trả lời hay nhất

Tôi không biết nó hoạt động tốt như thế nào, nhưng nó trả lại những gì bạn muốn:

biên tậpTôi đã cập nhật nó để lọc ra các khoảng không có dữ liệu trong bảng.

**Sơ đồ (MySQL v8.0)**

TẠO BẢNG `tbdata` (
`ID` INT(10) KHÔNG NULL TỰ ĐỘNG TĂNG,
`PatientID` INT(10) KHÔNG NULL,
`RecordDate` DATETIME KHÔNG NULL,
KHÓA CHÍNH (`ID`)
) ENGINE=INNODB AUTO_INCREMENT=1 BỘ KÝ TỰ MẶC ĐỊNH=latin1;

CHÈN VÀO tbdata (PatientID, RecordDate)
GIÁ TRỊ
(172116, '2019-11-15 13:43:45'),
(172816, '2019-11-15 13:43:55'),
(172816, '2019-11-15 13:44:06'),
(172816, '2019-11-15 13:44:16'),
(172816, '2019-11-15 13:44:27'),
(172816, '2019-11-15 13:44:38'),
(172816, '2019-11-15 13:44:48'),
(172816, '2019-11-15 13:44:59'),
(172816, '2019-11-15 13:45:09'),
(172816, '2019-11-15 13:45:20'),
(172816, '2019-11-15 13:45:31'),
(172816, '2019-11-15 13:45:41'),
(172816, '2019-11-15 13:45:52'),
(172816, '2019-11-15 13:46:02'),
(172816, '2019-11-15 13:46:13'),
(172816, '2019-11-15 13:46:24'),
(172816, '2019-11-15 13:46:35'),
(172816, '2019-11-15 13:46:46'),
(172816, '2019-11-15 13:46:56'),
(172816, '2019-11-15 13:47:07'),
(172816, '2019-11-15 13:47:19'),
(172816, '2019-11-15 13:47:30'),
(172816, '2019-11-15 13:47:43'),
(172816, '2019-11-15 13:47:54'),
(172816, '2019-11-15 13:48:04'),
(172816, '2019-11-15 13:48:15'),
(172816, '2019-11-15 14:48:25'),
(172816, '2019-11-15 17:48:36'),
(172816, '2019-11-15 18:48:47'),
(172816, '2019-11-15 20:48:57'),
(172816, '15-11-2019 22:49:08'),
(172816, '2019-11-15 23:49:18');

    DẤU PHÂN CÁCH //
TẠO THỦ TỤC While_Loop()
BẮT ĐẦU
ĐẶT @row_number = 0;

CHỌN MIN(RecordDate), MAX(RecordDate)
VÀO @min, @max
TỪ tbdata;

ĐẶT @min = DATE_FORMAT(@min, "%Y-%m-%d %H:00:00");

CHỌN CEIL(TIMESTAMPDIFF(GIỜ, @min, @max)/4) VÀO @number_of_intervals;

Trong khi @row_number <= @number_of_intervals LÀM
ĐẶT @start_time = @min;
ĐẶT @end_time = DATE_ADD(@start_time, KHOẢNG THỜI GIAN 4 GIỜ);
ĐẶT @min = @end_time;
ĐẶT @row_number = @row_number + 1;

CHỌN ĐẾM (PatientID) VÀO @existent_slot TỪ tbdata NƠI RecordDate GIỮA @start_time và @end_time;

NẾU @existent_slot THÌ
CHỌN @start_time thời gian bắt đầu, @end_time thời gian kết thúc;
KẾT THÚC NẾU;
KẾT THÚC TRONG KHI;


KẾT THÚC;

**Câu hỏi số 1**

GỌI While_Loop();

| thời gian bắt đầu | thời gian kết thúc |
| ------------------- | ------------------- |
| 2019-11-15 13:00:00 | 2019-11-15 17:00:00 |

| thời gian bắt đầu | thời gian kết thúc |
| ------------------- | ------------------- |
| 2019-11-15 17:00:00 | 2019-11-15 21:00:00 |

| thời gian bắt đầu | thời gian kết thúc |
| ------------------- | ------------------- |
| 2019-11-15 21:00:00 | 2019-11-16 01:00:00 |


Có lẽ bạn nên lưu trữ kết quả vào một bảng tạm thời thay vì chỉ in chúng ra.

Mã cập nhật bên dưới hoạt động với tôi.

DẤU PHÂN CÁCH $$

THỦ TỤC DROP NẾU TỒN TẠI `While_Loop`$$

TẠO THỦ TỤC `While_Loop`()
BẮT ĐẦU
XÓA BẢNG TẠM THỜI NẾU TỒN TẠI _tempTableTimeSlot;
TẠO BẢNG TẠM THỜI _tempTableTimeSlot(
thời gian bắt đầu VARCHAR(100),
thời gian kết thúc VARCHAR(100)
);
ĐẶT @row_number = 0;
CHỌN MIN(RecordDate), MAX(RecordDate)
VÀO @min, @max
TỪ tbdata;
ĐẶT @min = DATE_FORMAT(@min, "%Y-%m-%d %H:00:00");
CHỌN CEIL(TIMESTAMPDIFF(GIỜ, @min, @max)/4) VÀO @number_of_intervals;
Trong khi @row_number <= @number_of_intervals LÀM
ĐẶT @start_time = @min;
ĐẶT @end_time = DATE_ADD(@start_time, KHOẢNG THỜI GIAN 4 GIỜ);
ĐẶT @min = @end_time;
ĐẶT @row_number = @row_number + 1;

CHỌN ĐẾM (PatientID) VÀO @existent_slot TỪ tbdata NƠI RecordDate GIỮA @start_time VÀ @end_time;
NẾU @existent_slot THÌ
CHÈN VÀO _tempTableTimeSlot(thời gian bắt đầu, thời gian kết thúc) CHỌN @thời gian bắt đầu thời gian bắt đầu1, @thời gian kết thúc thời gian kết thúc1;
KẾT THÚC NẾU;
KẾT THÚC TRONG KHI;

CHỌN * TỪ _tempTable;
XÓA BẢNG TẠM THỜI NẾU TỒN TẠI _tempTableTimeSlot;
KẾT THÚC$$

DẤU PHÂN GIỚI ;

Về mysql - Cách chia giờ giữa tối thiểu (ngày) và tối đa (ngày) thành bảng 4 giờ trong máy chủ MySQL, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/58873608/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress