簡體   English   中英

SQL Server:如何從歷史記錄表中獲取數據?

[英]SQL Server: how do I get data from a history table?

您能幫我建立一個SQL查詢從歷史表中檢索數據嗎?

我是新手,只有一個星期的編碼經驗。 到目前為止,我一直在嘗試簡單的SELECT語句,但遇到了絆腳石。

我的足球俱樂部的數據庫包含三個表格。 第一個將球鏈接到玩家:

BallDetail

| BallID | PlayerID | TeamID |
|-------------------|--------|
|      1 |       11 |     21 |
|      2 |       12 |     22 |

第二個列出了發生在球上的事情:

BallEventHistory

| BallID | Event |  EventDate |
|--------|------ |------------|
|      1 |  Pass | 2012-01-01 |
|      1 | Shoot | 2012-02-01 |
|      1 |  Miss | 2012-03-01 |
|      2 |  Pass | 2012-01-01 |
|      2 | Shoot | 2012-02-01 |

第三個是歷史更改表。 換手后,記錄歷史:

HistoryChanges

| BallID | ColumnName | ValueOld | ValueNew |
|--------|------------|----------|----------|
|      2 |   PlayerID |       11 |       12 |
|      2 |     TeamID |       21 |       22 |

我正在嘗試獲取一張表,該表列出球員11在所有球傳給其他球員之前對所有球進行的所有傳球和射門。 像這樣:

| PlayerID | BallID | Event | Month |
|----------|--------|-------|-------|
|       11 |      1 |  Pass |   Jan |
|       11 |      1 | Shoot |   Feb |
|       11 |      2 |  Pass |   Jan |

我開始是這樣的:

SELECT PlayerID, BallID, Event, DateName(month, EventDate)
FROM BallDetail bd INNER JOIN BallEventHistory beh ON bd.BallID = beh.BallID
WHERE PlayerID = 11 AND Event IN (Pass, Shoot) ...

但是,如何確保即使現在與另一個玩家在一起,第2球也被包括在內?

Select PlayerID,BallID,Event,datename(month,EventDate) as Month,Count(*) as cnt from
(
Select 
Coalesce(
(Select ValueNew from #HistoryChanges where ChangeDate=(Select max(ChangeDate) from #HistoryChanges h2 where h2.BallID=h.BallID and ColumnName='PlayerID' and ChangeDate<=EventDate) and  BallID=h.BallID and ColumnName='PlayerID')
,(Select PlayerID from #BallDetail where BallID=h.BallID)
) as PlayerID,
h.BallID,h.Event,EventDate
from #BallEventHistory h
) a
Group by PlayerID, BallID, Event,datename(month,EventDate)
SELECT d.PlayerID, d.BallID, h.Event, DATENAME(mm, h.EventDate) AS Month
FROM BallDetail d JOIN BallEventHistory h ON d.BallID = h.BallID 
WHERE h.Event IN ('Pass', 'Shoot') AND d.PlayerID = 11
  OR EXISTS (SELECT 1
             FROM dbo.HistoryChanges c
             WHERE c.ValueOld = 11 AND c.ValueNew = d.PlayerID AND c.ColumnName = 'PlayerID' and c.ChangeDate = h.EventDate)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM