Tôi có hai bảng 1- `FormTemplate` trong đó các cột là Id, CreatedDate, Creator, Schema và 2 - `FormSubmissions` trong đó các cột là Id, FormTemplateId(Foreign key), Created Date, Creator.
Mẫu biểu mẫu
| Id | Ngày tạo | Người tạo | Sơ đồ |
|------------|------------------------|---------|---------|
| 1 | 2023-01-25 00:52:43.717| John | {} |
| 2 | 2023-01-25 00:52:43.717| Tương tự | {} |
| 3 | 2023-01-25 00:52:43.717| Alee | {} |
Nộp biểu mẫu
| Id | FormTemplateId (Khóa ngoại)| CreatedDate | Creator |
|--------|--------------------------------|------------------------|------------|
| 1 | 2| 2023-05-25 00:52:43.717| Kyle |
| 2 | 2 | 2023-02-25 00:52:43.717 | Kayla |
| 3 | 3| 2019-03-08 00:52:43.717| Arthur |
| 4 | 3 | 2019-02-25 00:52:43.717 | Milli |
Tôi muốn có được tất cả Mẫu biểu mẫu
hàng nơi MỚI NHẤT Nộp biểu mẫu
là 6 tháng trước. trong bảng trên: Tôi chỉ nên lấy hàng thứ 3 (Id=3) từ Mẫu biểu mẫu
Tôi muốn lấy tất cả các hàng FormTemplate có FormSubmission mới nhất từ 6 tháng trước. Trong bảng trên: Tôi chỉ nên lấy hàng thứ ba (Id=3) từ FormTemplate
Tôi không thể tạo truy vấn hoặc tìm cách lấy FormTemplates với tiêu chí này một cách hiệu quả.
Tôi không thể tạo truy vấn và không tìm ra cách hiệu quả để lấy FormTemplates bằng tiêu chí này.
Thêm câu trả lời
T-SQL là một phương ngữ SQL được sử dụng bởi nhiều sản phẩm bao gồm Sybase, SQL Server và Azure Synapse. Sản phẩm (R)DBMS bạn đang sử dụng ở đây là gì? Biên tập câu hỏi của bạn để gắn thẻ sản phẩm đó và (nếu có liên quan) gắn thẻ phiên bản cho sản phẩm.
T-SQL là phương ngữ SQL được sử dụng trong nhiều sản phẩm, bao gồm Sybase, SQL Server và Azure Synapse. Bạn đang sử dụng sản phẩm (R)DBMS nào ở đây? Chỉnh sửa câu hỏi của bạn để gắn thẻ sản phẩm đó và (nếu có liên quan) gắn thẻ phiên bản của sản phẩm đó.
@ThomA Tôi đang sử dụng cái này trên cơ sở dữ liệu Azure SQL. Đã chỉnh sửa để thêm thẻ.
@ThomA Tôi đang sử dụng cái này trên Cơ sở dữ liệu Azure SQL. Đã chỉnh sửa để thêm thẻ.
XÓA BẢNG NẾU CÓ #FormTemplate;
XÓA BẢNG NẾU CÓ #FormSubmission;
TẠO BẢNG #FormTemplate
(
Id INT KHÔNG NULL,
CreatedDate ngày giờ KHÔNG NULL,
Người tạo varchar(50) KHÔNG NULL
);
CHÈN VÀO #FormTemplate
GIÁ TRỊ
(1, '2023-01-25 00:52:43.717', 'John')
, (2, '2023-01-25 00:52:43.717', 'Giống nhau')
, (3, '2023-01-25 00:52:43.717', 'Alee')
;
TẠO BẢNG #FormSubmission
(
Id INT KHÔNG NULL,
FormTemplateId INT KHÔNG NULL,
CreatedDate ngày giờ KHÔNG NULL,
Người tạo varchar(50) KHÔNG NULL
);
CHÈN VÀO #FormSubmission
GIÁ TRỊ
(1, 2, '2023-05-25 00:52:43.717', 'Kyle')
, (2, 2, '2023-02-25 00:52:43.717', 'Kayla')
, (3, 3, '2019-03-08 00:52:43.717', 'Arthur')
, (4, 3, '2019-02-25 00:52:43.717', 'Milli')
;
CHỌN T.Id, MAX(T.CreatedDate) LÀM CreatedDate, T.Creator
TỪ #FormTemplate NHƯ T
INNER JOIN #FormSubmission AS S
TRÊN T.ID = S.FormTemplateId
NHÓM THEO T.Id, T.Creator
CÓ MAX(S.CreatedDate) <= DATEADD(MONTH, -6, GETDATE())
;
Bạn cũng có thể sử dụng phép nối được nhóm sẵn.
Bạn cũng có thể sử dụng chức năng tham gia nhóm trước.
LỰA CHỌN
t.*,
S.*
TỪ FormTemplate t
THAM GIA (
LỰA CHỌN
s.FormTemplateId,
MaxCreated = MAX(ngày tạo thứ s)
TỪ FormSubmissions
NHÓM THEO s.FormTemplateId
CÓ MAX(s.CreatedDate) <= DATEADD(MONTH, -6, GETDATE())
)s TRÊN t.ID = s.FormTemplateId;
Để có được ID thực tế của truy vấn phụ, thay vào đó bạn có thể sử dụng ÁP DỤNG
truy vấn phụ với một ĐẦU TRANG 1
Để có được ID thực tế của truy vấn phụ, bạn có thể sử dụng truy vấn phụ APPLY với TOP 1
LỰA CHỌN
t.*,
S.*
TỪ FormTemplate t
ÁP DỤNG CHÉO (
CHỌN ĐẦU TRANG (1)
s.FormTemplateId,
s. Ngày tạo
TỪ FormSubmissions
NƠI t.ID = s.FormTemplateId
SẮP XẾP THEO s.CreatedDate DESC
)S
NƠI s.CreatedDate <= DATEADD(THÁNG, -6, GETDATE());
Đối với các câu trả lời khác, miễn là bạn đang nhóm theo t.ID
hiệu suất chắc chắn sẽ giống nhau.
Đối với các câu trả lời khác, miễn là bạn nhóm theo t.ID thì hiệu suất gần như chắc chắn sẽ giống nhau.
chọn FormTemplateId
vào #cũ
từ FormSubmission
nhóm theo FormTemplateId
có max(CreatedDate)<=dateadd(tháng,-6,getdate())
chọn * từ FormTemplate nơi Id trong (chọn FormTemplateId từ #old)
Thêm câu trả lời
Tôi đang chạy truy vấn của bạn nhưng muốn lấy FormSubmission.Id trong kết quả hiện không hiển thị với nội dung trên. Tôi đang nhận được không hợp lệ trong danh sách chọn vì nó không được chứa trong hàm tổng hợp hoặc mệnh đề GROUP BY
Tôi muốn biết FormSubmission nào là mục nhập mới nhất (đã gửi cách đây hơn 6 tháng)
Tôi đang chạy truy vấn của bạn nhưng hy vọng sẽ nhận được FormSubmission.Id trong kết quả nhưng hiện tại nó không hiển thị ở trên. Những gì tôi nhận được trong danh sách chọn là không hợp lệ vì nó không được chứa trong hàm tổng hợp hoặc trong mệnh đề GROUP BY. Tôi muốn biết FormSubmission nào là mục nhập gần đây nhất (được gửi cách đây hơn 6 tháng)
Xem bản chỉnh sửa mới..
Xem bản chỉnh sửa mới. .
bạn là một huyền thoại. điều đó hiệu quả. :) Cảm ơn bạn
Bạn là một huyền thoại. Nó đã có hiệu quả. :)Cảm ơn bạn rất nhiều.
nó có xóa #old sau khi truy vấn không?
Liệu nó có xóa #old sau truy vấn không?
#bảng tự động chết vào cuối phiên
#Khi phiên làm việc kết thúc, bảng sẽ tự động trở nên không hợp lệ
Tôi là một lập trình viên xuất sắc, rất giỏi!