2014-09-26 4 views
-1

У меня есть две таблицы [SourceTbl] и [TransactionDates] .. В моем SourceTbl у меня есть эти поля .. Source и TransactionКак я могу получить предыдущий и текущий счет транзакции эффективным способом?

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 
+0

Что '' PrevCount' и CurrentCount' значит? Сделки вчера и сегодня? – Mureinik

+0

Да ... вы правы – Ian

+0

-1 строка или дата не совпадают, если есть пропущенная дата или повторяющаяся дата. Вопрос не ясен. – Paparazzi

ответ

0

SQL Fiddle

сервера Настройка MS SQL 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 | 
+0

Спасибо за предлагаемое решение. В настоящее время я не имею дело с текущей датой. Это зависит от активной транзакции. – Ian

+0

И что делает транзакцию активной или InActive? Ну, вам нужно предоставить всю информацию, чтобы получить решение для портье, вы не ожидаете, что кто-нибудь здесь угадает, чего вы хотите. –

+0

Извините, что не предоставил всю информацию. Я уже изменил родительскую тему. Добавлено поле IsActive в таблице TransactionDates, чтобы мы могли переключать то, что я хочу отслеживать изменения. – Ian

Смежные вопросы