Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: หาวันที่ล่าสุด 3 วันที่ไม่ซ้ำกัน ด้วย DISTINCT, ORDER BY, LIMIT


คำอธิบาย

ใช้ Subquery กรองวันที่ไม่ซ้ำ (DISTINCT) ก่อน แล้ว ORDER BY DESC เรียงใหม่ไปเก่า และ LIMIT 3 เอา 3 อันดับแรก

ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง

mysql> create table DemoTable ( 
    AdmissionDate date ); 
Query OK, 0 rows affected (0.56 sec)

การเพิ่มข้อมูล (มีวันที่ซ้ำ)

mysql> insert into DemoTable values('2019-09-04'); 
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('2019-08-10'); 
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('2019-09-21'); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-09-18'); 
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('2019-09-21'); 
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('2019-08-18'); 
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2019-09-18'); 
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('2019-09-16'); 
Query OK, 1 row affected (0.10 sec)

แสดงข้อมูลทั้งหมด

mysql> select * from DemoTable;

ผลลัพธ์:

+---------------+
| AdmissionDate |
+---------------+
| 2019-09-04    |
| 2019-08-10    |
| 2019-09-21    |
| 2019-09-18    |
| 2019-09-21    |
| 2019-08-18    |
| 2019-09-18    |
| 2019-09-16    |
+---------------+
8 rows in set (0.00 sec)

คิวรี่หา 3 วันที่ล่าสุดที่ไม่ซ้ำ

mysql> select AdmissionDate 
from (select distinct AdmissionDate from DemoTable) tbl 
order by AdmissionDate desc 
limit 3;

ผลลัพธ์

+---------------+
| AdmissionDate |
+---------------+
| 2019-09-21    |
| 2019-09-18    |
| 2019-09-16    |
+---------------+
3 rows in set (0.00 sec)

คำอธิบายขั้นตอน

  1. SELECT DISTINCT AdmissionDate: ได้วันที่ไม่ซ้ำ: 2019-09-04, 2019-08-10, 2019-09-21, 2019-09-18, 2019-08-18, 2019-09-16
  2. ORDER BY AdmissionDate DESC: เรียงใหม่ไปเก่า: 2019-09-21, 2019-09-18, 2019-09-16, 2019-09-04, 2019-08-18, 2019-08-10
  3. LIMIT 3: เอา 3 อันดับแรก

ประโยชน์

  • รายงานวันที่ล่าสุดที่มีกิจกรรม
  • Dashboard แสดงกิจกรรมล่าสุด
  • Archive/ETL เลือกวันที่ต้องการประมวลผล