รูปแบบคำสั่ง
SELECT DATE(MAX(yourColumnName)) INTO @yourVariableName FROM yourTableName;
สร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable2001 ( ExamDate date );
mysql> insert into DemoTable2001 values('2019-01-10');
mysql> insert into DemoTable2001 values('2018-12-31');
mysql> insert into DemoTable2001 values('2018-11-18');
mysql> insert into DemoTable2001 values('2019-07-25');
ข้อมูลในตาราง
+------------+
| ExamDate |
+------------+
| 2019-01-10 |
| 2018-12-31 |
| 2018-11-18 |
| 2019-07-25 |
+------------+
ขั้นตอนการใช้ User-Defined Variable
mysql> set @comingExamDate := null; Query OK, 0 rows affected (0.00 sec)
mysql> select date(max(ExamDate)) into @comingExamDate from DemoTable2001; Query OK, 1 row affected (0.00 sec)
mysql> select @comingExamDate;
ผลลัพธ์
+------------------+
| @comingExamDate |
+------------------+
| 2019-07-25 |
+------------------+
อธิบาย
@comingExamDate คือ User-Defined Variable (ขึ้นต้นด้วย @)
INTO @var กำหนดค่าผลลัพธ์ของ SELECT ให้ตัวแปร (ทำงานได้เฉพาะ SELECT ที่คืน 1 แถว)
DATE(MAX(ExamDate)) หาวันที่มากที่สุด แล้วแปลงเป็น DATE (เผื่อคอลัมน์เป็น DATETIME)
การใช้งานตัวแปรต่อไป
-- ใช้ใน Query ถัดไป
SELECT * FROM DemoTable2001 WHERE ExamDate = @comingExamDate;
-- ใช้ใน Stored Procedure
CALL some_procedure(@comingExamDate);
ข้อแตกต่าง: User Variable vs Local Variable
| ประเภท | Syntax | ขอบเขต (Scope) | ใช้ใน |
| User-Defined | @var_name | Session (Connection) | SQL ทั่วไป, Prepared Stmt |
| Local (ใน SP) | DECLARE var_name TYPE; | เฉพาะใน BEGIN...END | Stored Procedure/Function |
ตัวอย่างใน Stored Procedure
CREATE PROCEDURE GetMaxExamDate()
BEGIN
DECLARE max_date DATE;
SELECT MAX(ExamDate) INTO max_date FROM DemoTable2001;
SELECT max_date AS MaxExamDate;
END;