我在這里搜索了許多類似的帖子,但它們似乎不符合我使用 SQL Server 的要求IDENTITY。
我有一個從另一個資料源中提取的資料框,其中可能包含重復的名稱。
資料框
| 日期 | 時間 | 姓名 | 結果 |
|---|---|---|---|
| 2022 年 3 月 28 日 | 7:00:00 | 美國廣播公司 | 0.23 |
| 2022 年 3 月 28 日 | 7:00:00 | 美國廣播公司 | 0.19 |
| 2022 年 3 月 28 日 | 7:05:00 | 定義 | 0.36 |
| 2022 年 3 月 28 日 | 7:10:00 | 吉 | 0.29 |
當我加載到 SQL Server 時,我需要創建一個 Retest_Count 列以指示測驗順序。如果名稱重復且時間戳相同,則始終根據“原始資料順序”將較新的設定為 0,將較舊的設定為 1。像這樣:
SQL 表 1
| 日期 | 時間 | 姓名 | 結果 | 重新測驗計數 |
|---|---|---|---|---|
| 2022 年 3 月 28 日 | 7:00:00 | 美國廣播公司 | 0.23 | 1 |
| 2022 年 3 月 28 日 | 7:00:00 | 美國廣播公司 | 0.19 | 0 |
| 2022 年 3 月 28 日 | 7:05:00 | 定義 | 0.36 | 0 |
| 2022 年 3 月 28 日 | 7:10:00 | 吉 | 0.29 | 0 |
當我插入具有相同名稱但不同時間戳的新資料時,始終為新資料提供 0 并且現有表需要像這樣自動遞增:
SQL 表 2
| 日期 | 時間 | 姓名 | 結果 | 重新測驗計數 |
|---|---|---|---|---|
| 2022 年 3 月 28 日 | 7:00:00 | 美國廣播公司 | 0.23 | 2 |
| 2022 年 3 月 28 日 | 7:00:00 | 美國廣播公司 | 0.19 | 1 |
| 2022 年 3 月 29 日 | 13:00:00 | 美國廣播公司 | 0.18 | 0 |
| 2022 年 3 月 28 日 | 7:05:00 | 定義 | 0.36 | 0 |
| 2022 年 3 月 28 日 | 7:10:00 | 吉 | 0.29 | 1 |
| 2022 年 3 月 29 日 | 21:05:00 | 吉 | 0.25 | 0 |
Is this possible to achieve by SQL Server script? Python solution is considered also.
uj5u.com熱心網友回復:
正如我在評論中提到的,這更適合VIEW. 您需要確保您的表中有某種列總是增加(例如 an IDENTITY)以實作這一點(因為我注意到您有 2 個測驗同時發生在相同的名稱,所以沒有一種表示哪個是“第一”的方式)。
然后你可以創建一個VIEW這樣的:
CREATE VIEW dbo.YourView_RetestCounts AS
SELECT [Date],
[Time],
[Name],
Result,
ROW_NUMBER() OVER (PARTITION BY [Name] ORDER BY IdentityColumn DESC) - 1 AS Retest_Count
FROM dbo.YourTable;
但是,如果您的目標是按照您的評論建議過濾到最新行,則使用 aVIEW和Get top 1 row of each group解決方案:
CREATE VIEW dbo.YourView_LatestTest AS
WITH CTE AS(
SELECT [Date],
[Time],
[Name],
Result,
ROW_NUMBER() OVER (PARTITION BY [Name] ORDER BY IdentityColumn DESC) AS Retest_Count
FROM dbo.YourTable)
SELECT [Date],
[Time],
[Name],
Result
FROM CTE
WHERE Retest_Count = 1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452429.html
標籤:python sql-server
上一篇:按多個條件排序競爭對手
