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

MySQL: หาวันที่สอบสูงสุด (MAX) และเก็บใน User-Defined Variable

รูปแบบคำสั่ง

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

ตัวอย่างใน Stored Procedure

CREATE PROCEDURE GetMaxExamDate()
BEGIN
    DECLARE max_date DATE;
    SELECT MAX(ExamDate) INTO max_date FROM DemoTable2001;
    SELECT max_date AS MaxExamDate;
END;
ประเภทSyntaxขอบเขต (Scope)ใช้ใน
User-Defined@var_nameSession (Connection)SQL ทั่วไป, Prepared Stmt
Local (ใน SP)DECLARE var_name TYPE;เฉพาะใน BEGIN...ENDStored Procedure/Function