我希望創建一個視圖來檢索特定日期的員工串列和上次參加的培訓。目前,我們有以下 T-SQL 陳述句:
------------ ---------------- ------------ -----------
| employeeNo | trainingCourse | dateStart | timeStart |
------------ ---------------- ------------ -----------
| 0001 | MSSQL | 2020-02-28 | 0800 |
| 0001 | MSOffice | 2020-09-30 | 1430 |
| 0001 | DotNET | 2021-06-03 | 1000 |
| 0002 | MSSQL | 2020-02-28 | 0800 |
| 0003 | MSSQL | 2020-02-28 | 0800 |
| 0003 | WINDOWS | 2021-03-07 | 2130 |
------------ ---------------- ------------ -----------
SELECT *
FROM (
SELECT t.*
, RANK() OVER (PARTITION BY employeeNo ORDER BY dateStart DESC, timeStart desc) rn
FROM Training t
WHERE dateStart <= @myPara
) v
WHERE rn = 1
因此,是否有任何想法或可能性將其作為視圖?例子:
SELECT * FROM myView WHERE dateStart <= '2020-12-31'
uj5u.com熱心網友回復:
創建一個回傳表的函式,以便向它傳遞所需的引數。
這里我使用了一個行內表值函式,它的創建就像創建一個視圖,但你可以向它傳遞引數。
嘗試這個
use MyDate
GO
Create FUNCTION GetLastCourse
(
@DateStart Date
)
RETURNS TABLE
AS
RETURN
(
SELECT id ,employeeNo ,trainingCourse ,dateStart ,timeStart , rn
FROM (
SELECT t.id ,t.employeeNo ,t.trainingCourse ,t.dateStart ,t.timeStart
, RANK() OVER (PARTITION BY employeeNo ORDER BY dateStart DESC,
timeStart desc) rn
FROM Training t
WHERE dateStart <= @DateStart
) v
WHERE rn = 1
)
GO
見https://database.guide/create-an-inline-table-valued-function-itvf-in-sql-server/
注意:不要在視圖或函式中使用 * 并始終回傳列 ID。
用法
SELECT * FROM [dbo].[GetLastCourse] ( '2020-12-31' )
uj5u.com熱心網友回復:
我認為對于上述情況,您可能更喜歡存盤程序而不是視圖。您可以將日期作為輸入引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362286.html
標籤:sql sql-server 查询语句
下一篇:TSQL:根據孩子的條件選擇父母
