คำอธิบาย
ใช้ 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)
คำอธิบายขั้นตอน
- SELECT DISTINCT AdmissionDate: ได้วันที่ไม่ซ้ำ: 2019-09-04, 2019-08-10, 2019-09-21, 2019-09-18, 2019-08-18, 2019-09-16
- ORDER BY AdmissionDate DESC: เรียงใหม่ไปเก่า: 2019-09-21, 2019-09-18, 2019-09-16, 2019-09-04, 2019-08-18, 2019-08-10
- LIMIT 3: เอา 3 อันดับแรก
ประโยชน์
- รายงานวันที่ล่าสุดที่มีกิจกรรม
- Dashboard แสดงกิจกรรมล่าสุด
- Archive/ETL เลือกวันที่ต้องการประมวลผล