MySQL nhận bản ghi ngày mới nhất

Bạn có thể sử dụng một hàm cửa sổ, chẳng hạn như hàm xếp hạng có tên là

WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
5 để tạo một chuỗi số trong một nhóm (
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
6) của mỗi
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
7 được sắp xếp theo thứ tự giảm dần của
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
8, như vậy

SELECT ID, Person, MeetingDate
FROM
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
    FROM MyTable
) AS Subquery
WHERE SortId = 1

Bạn cũng có thể sử dụng biểu thức bảng chung (CTE) thay vì truy vấn con để sắp xếp mọi thứ nếu bạn thích

WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1

Sự khác biệt giữa việc sử dụng truy vấn con và CTE chủ yếu chỉ là ưu tiên về tổ chức/khả năng đọc, nhưng CTE có thể hữu ích để giữ cho mã sạch hơn nếu bạn cần xâu chuỗi nhiều chuỗi lại với nhau để thực hiện các thao tác dữ liệu bổ sung (trái ngược với nhiều cấp truy vấn con)


Lưu ý, bbaird đưa ra một nhận xét rất công bằng rằng nếu bạn gặp trường hợp cùng một

WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
7 có hai hàng khác nhau với cùng một
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
8 chính xác thì các truy vấn trước đây của tôi ở trên là không xác định và có thể trả về một
SELECT *
FROM exam
ORDER BY exam_date ASC;
1 khác từ trong cùng một nhóm
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
8 và
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
7

Ví dụ: nếu có hai hàng trong

WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
2 cho
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
7 A có
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
8 25/10/2021, một hàng có
SELECT *
FROM exam
ORDER BY exam_date ASC;
1 1 và hàng kia có
SELECT *
FROM exam
ORDER BY exam_date ASC;
1 2, thì thứ tự chỉ trên trường
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
8 là không xác định vì nó giống nhau cho hai trường
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
8 . Nói cách khác, hàng nào đến trước khi các giá trị được sắp xếp hoàn toàn giống nhau?

Để khắc phục điều đó, bạn cần đảm bảo rằng bạn đặt hàng theo một biểu thức duy nhất. Nếu cột

SELECT *
FROM exam
ORDER BY exam_date ASC;
1 của bạn được đảm bảo là
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
1 thì trong trường hợp bạn có hai hàng có cùng một
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
8 cho cùng một
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
7, bạn cũng có thể thêm
SELECT *
FROM exam
ORDER BY exam_date ASC;
1 vào cuối mệnh đề order by của hàm cửa sổ để đảm bảo rằng bạn luôn nhận được . Nếu bạn muốn giá trị lớn nhất (thường là mới nhất - tùy thuộc vào cách bạn tạo chúng) giá trị
SELECT *
FROM exam
ORDER BY exam_date ASC;
1 khi có hai hàng cho cùng một
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
7 với cùng một
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
8 thì bạn sẽ đặt hàng theo trường
SELECT *
FROM exam
ORDER BY exam_date ASC;
1 giảm dần

Sử dụng từ khóa

SELECT *
FROM exam
ORDER BY exam_date ASC;
2 và tên của cột mà bạn muốn sắp xếp. Bằng cách này, bạn sẽ sắp xếp dữ liệu theo thứ tự tăng dần theo cột này. Bạn cũng có thể sử dụng từ khóa
SELECT *
FROM exam
ORDER BY exam_date ASC;
3 để làm rõ rằng thứ tự tăng dần (ngày sớm nhất được hiển thị đầu tiên, ngày mới nhất được hiển thị cuối cùng, v.v. )

SELECT *
FROM exam
ORDER BY exam_date ASC;

Nếu bạn muốn xem ngày mới nhất trước và ngày sớm nhất cuối cùng, bạn cần sắp xếp theo thứ tự giảm dần. Sử dụng từ khóa

SELECT *
FROM exam
ORDER BY exam_date ASC;
4 trong trường hợp này

________số 8

Lưu ý rằng trong MySQL, các

SELECT *
FROM exam
ORDER BY exam_date ASC;
5 được hiển thị đầu tiên khi sắp xếp theo thứ tự tăng dần và cuối cùng khi sắp xếp theo thứ tự giảm dần. Ngoài ra, các hàng có cùng
SELECT *
FROM exam
ORDER BY exam_date ASC;
9 được hiển thị theo thứ tự ngẫu nhiên (bạn có thể thấy
SELECT *
FROM exam
ORDER BY exam_date ASC;
7 thứ ba và
SELECT *
FROM exam
ORDER BY exam_date ASC;
8 thứ tư, hoặc
SELECT *
FROM exam
ORDER BY exam_date ASC;
8 thứ ba và
SELECT *
FROM exam
ORDER BY exam_date ASC;
7 thứ tư)

ví dụ 2

Bảng

SELECT *
FROM exam
ORDER BY exam_date ASC;
0 có các cột sau.
SELECT *
FROM exam
ORDER BY exam_date ASC;
1,
SELECT *
FROM exam
ORDER BY exam_date DESC;
3,
SELECT *
FROM exam
ORDER BY exam_date DESC;
4 và
SELECT *
FROM exam
ORDER BY exam_date DESC;
5. Các tháng được đặt tên, không phải bằng số

mônexam_yearexam_monthexam_dayToán học2019Tháng mười hai19Tiếng Anh2020Tháng một8Khoa học2020Tháng15Sức khỏe2020Tháng một5Nghệ thuậtNULLNULLNULL

Bạn muốn sắp xếp các hàng theo ngày thi

Dung dịch

WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
7

Kết quả trông như thế này (các hàng được sắp xếp theo thứ tự tăng dần bởi

SELECT *
FROM exam
ORDER BY exam_date DESC;
3,
SELECT *
FROM exam
ORDER BY exam_date DESC;
4 và
SELECT *
FROM exam
ORDER BY exam_date ASC;
9)

mônexam_yearexam_monthexam_dayNghệ thuậtNULLNULLNULLMToán học2019Tháng mười hai19Sức khỏe2020Tháng một5Khoa học2020Tháng một5Tiếng Anh2020Tháng một8

Thảo luận

Để sắp xếp theo ngày, hãy tạo các giá trị ngày từ các giá trị năm, tháng và ngày. Để thực hiện việc này, hãy sử dụng hàm STR_TO_DATE(). Nếu bạn có một ngày được lưu trữ dưới dạng một chuỗi ở định dạng '

SELECT *
FROM exam
ORDER BY exam_date DESC;
9', bạn có thể chuyển nó thành một ngày bằng cách sử dụng
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
70. Nhưng trước tiên, bạn cần tạo một chuỗi bằng hàm CONCAT()

WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
2

Hàm

WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
71 kết hợp tất cả các đối số thành một chuỗi. Bạn không cần truyền số thành chuỗi. Vì bạn muốn lấy một chuỗi ở định dạng '
SELECT *
FROM exam
ORDER BY exam_date DESC;
9', nên các đối số là
SELECT *
FROM exam
ORDER BY exam_date DESC;
3,
SELECT *
FROM exam
ORDER BY exam_date DESC;
4,
SELECT *
FROM exam
ORDER BY exam_date DESC;
5 và khoảng cách giữa chúng

Sau đó, bạn cần chuyển đổi chuỗi này thành ngày tháng bằng hàm

WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
70. Đối số thứ hai của hàm này là định dạng ngày tháng.
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
77 là viết tắt của năm,
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
78 là viết tắt của tháng (tên đầy đủ của nó, không phải là số) và
WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
79 là viết tắt của ngày

WITH CTE_MyTable_Sorted AS
(
    SELECT
        ID,
        Person,
        MeetingDate,
        ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
    FROM MyTable
)

SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
2

Sử dụng nó với mệnh đề

SELECT *
FROM exam
ORDER BY exam_date ASC;
2 để sắp xếp các hàng theo thứ tự tăng dần theo ngày. Nếu bạn muốn xem các hàng theo thứ tự giảm dần, chỉ cần thêm từ khóa
SELECT *
FROM exam
ORDER BY exam_date ASC;
4, như thế này

Làm cách nào để có được bản ghi mới nhất dựa trên ngày trong MySQL?

nếu bạn cần theo ngày giờ của cột khác thì bạn có thể sử dụng ->orderBy('columnName','desc/asc')->get() otherwise you can use latest() function.

Làm cách nào để có được bản ghi ngày mới nhất trong SQL?

Đây là cú pháp mà chúng ta có thể sử dụng để lấy các bản ghi ngày mới nhất trong SQL Server. Chọn tên_cột,. Từ tên_bảng Thứ tự theo ngày_cột Desc; Bây giờ, hãy sử dụng cú pháp đã cho để chọn 10 bản ghi cuối cùng từ bảng mẫu của chúng ta.

Làm cách nào tôi có thể lấy bản ghi ngày hôm qua trong MySQL?

Trong MySQL, bạn có thể trừ bất kỳ khoảng ngày nào bằng cách sử dụng hàm DATE_SUB(). Ở đây, vì bạn cần trừ một ngày, nên bạn sử dụng DATE_SUB(CURDATE(), INTERVAL 1 DAY) để lấy ngày hôm qua.