如何以有效的方式获取交易的先前和当前计数?

时间:2014-09-26 09:53:11

标签: sql sql-server tsql

我有两个表[SourceTbl][TransactionDates] ..在我的SourceTbl我有这些字段.. SourceTransaction

SourceTbl表:

[Source]  [Transaction]   
 AAB        1  
 AAA        1  
 ABB        2  
 AAA        1  
 AAB        1

TransactionDates表:

 [TransactionID] [Date]    [isActive]  
     1           9/26/2014   1  
     2           9/25/2014   0  
     3           9/24/2014   0  

如果我们选择TransactionID需要计算当前所选的交易,并且还获得先前交易的先前计数(-1日期或活动交易行)。交易基于什么是活跃的。表格中只应激活1个有效日期 输出应该是 - 我使用的TransactionID是1。

Source PrevCount CurrentCount   
 AAB     0          2   
 AAA     0          2  
 ABB     1          0

1 个答案:

答案 0 :(得分:0)

SQL Fiddle

MS SQL Server 2008架构设置

CREATE TABLE [SourceTbl] ([Source] VARCHAR(10),  [Transaction] INT)
INSERT INTO [SourceTbl]([Source] ,[Transaction]) 
VALUES
('AAB', 1),
('AAA', 1),
('ABB', 2),
('AAA', 1),
('AAB', 1)

CREATE TABLE [TransactionDates] ([TransactionID] INT,  [Date]  DATE)
INSERT INTO [TransactionDates] ([TransactionID], [Date])
VALUES     
(1 ,'9/26/2014'),
(2 ,'9/25/2014'),
(3 ,'9/24/2014')

查询1

SELECT S.Source
      ,COUNT( CASE WHEN T.[Date] = CAST(GETDATE() - 1 AS DATE) 
                                          THEN 1 ELSE NULL END) AS PrevCount 
      ,COUNT( CASE WHEN T.[Date] = CAST(GETDATE() AS DATE) 
                                          THEN 1 ELSE NULL END) AS CurrentCount
FROM SourceTbl S 
INNER JOIN TransactionDates T ON S.[Transaction] = T.[TransactionID]
WHERE T.[DATE] >= CAST(GETDATE() - 1 AS DATE)
 AND  T.[DATE] <= CAST(GETDATE() AS DATE) 
GROUP BY S.Source

<强> Results

| SOURCE | PREVCOUNT | CURRENTCOUNT |
|--------|-----------|--------------|
|    AAA |         0 |            2 |
|    AAB |         0 |            2 |
|    ABB |         1 |            0 |