Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Trợ giúp với truy vấn SQL để tìm ngày khả dụng tiếp theo cho hệ thống đặt chỗ

Những điều sau đây sẽ giúp bạn thực hiện. bạn có thể muốn điều chỉnh mẫu hàm "Current_Date ()" của tôi cho bất kỳ ngày nào có thể là ngày bắt đầu đặt chỗ của bạn và đi ra ngoài nhiều ngày như vậy ....

Điều này sử dụng các biến nội tuyến của MySQL trong truy vấn. Truy vấn bên trong là một sự chuẩn bị đơn giản của một biến đặt trước (@r) dựa trên một số ngày bắt đầu (current_date ()) và tham gia vào bảng mục. Bằng cách không thực hiện điều khoản tham gia, nó sẽ có một ngày cho mọi mục. Trong trường hợp của tôi, tôi chỉ đang cân nhắc việc đi chơi trong 30 ngày, vì vậy tôi đã áp dụng giới hạn 30 mặt hàng đầu tiên. Không có cơ sở nào khác ngoài việc cung cấp cho tôi đủ hồ sơ để tôi không phải tạo một bảng tạm thời gồm 30 bản ghi (hoặc dù bạn muốn ra ngoài trong nhiều ngày). Điều này tạo ra một truy vấn bí danh "JustDates" và có một cột duy nhất là "OpenDate". Đây là cơ sở của phạm vi ngày để kiểm tra.

Điều này hiện được kết hợp với bảng mặt hàng, nhưng không có điều kiện nào tạo ra một hệ Descartes để nói cho mỗi ngày, so sánh với mọi mặt hàng ... theo mệnh đề WHERE, tôi chỉ quan tâm đến các mặt hàng có SKU của thời tiết "ABC123", chúng có 10 sê-ri. #s hoặc 100. Điều này hiện có thể mang lại cho tôi 300 hoặc 3000 (10 mặt hàng nối tiếp @ 30 ngày hoặc 100 mặt hàng nối tiếp @ 30 ngày.

Bây giờ tôi có một "phạm vi" của tất cả các số sê-ri riêng lẻ và những ngày có thể để kiểm tra tình trạng còn hàng, giờ tôi có thể truy vấn hệ thống đặt chỗ. Vì vậy, thông qua một lựa chọn phụ và KHÔNG VÀO cho một SKU phù hợp nhất định, SERIAL # và Ngày CÓ THỂ được tìm thấy trong đặt chỗ, tôi chỉ muốn giữ lại những người KHÔNG tìm thấy Ngày OpenDate đã cho. Tôi đã mô phỏng cấu trúc bảng của bạn và đưa vào một số ít các mục, nhiều số sê-ri và phạm vi ngày đặt trước bị đình trệ và nó hoạt động rất tốt ...

Rõ ràng, tôi sẽ đảm bảo các chỉ mục trên sku / serial về hiệu suất. Thay đổi bổ sung duy nhất mà tôi có thể thực hiện là khi truy vấn các đặt chỗ, để loại trừ bất kỳ đặt chỗ nào có ngày kết thúc trước ngày bắt đầu được đề cập cho truy vấn của BẠN, và theo tùy chọn, không có Ngày bắt đầu> ngày CUỐI CÙNG mà bạn đang xem xét. Nếu bạn có rất nhiều lượt đặt trước kéo dài nhiều năm, ai quan tâm đến điều gì đó cổ xưa hoặc điều gì đó trong tương lai từ phạm vi ngày được đề cập.

select  items.sku,
        items.serial_number,
        JustDates.OpenDate
    from 
        ( SELECT 
                 @r:= date_add(@r, interval 1 day ) OpenDate
            FROM 
                 (select @r := current_date()) vars,
                items limit 30 ) JustDates,
        items
    where 
            sku = "ABC123"
        and sku not in ( select sku from Reservations
                            where items.sku = reservations.sku
                              and items.serial_number = reservations.serial_number
                              and justDates.OpenDate >= reservations.start_date
                              and justDates.OpenDate <= reservations.end_date )
    order by 
       items.serial_number,
       justDates.OpenDate


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ngăn chặn các mục nhập trùng lặp vào cơ sở dữ liệu

  2. MySQL Chọn DISTINCT nhiều cột dựa trên tính duy nhất của một hàng?

  3. Câu lệnh SHOW TABLES với nhiều giá trị LIKE

  4. Không thể thả khóa ngoại trong MySQL

  5. Làm cách nào để cập nhật một bảng tự động khi một bảng khác được cập nhật trên máy chủ mysql khác?