2014-02-14 6 views
0

если я следующие записи базы данныхКак получить текущую запись на каждый день

DATE  ITEMNAME 

2014-02-10 A 
2014-02-10 B 
2014-02-10 C 
2014-02-11 D 
2014-02-11 E 
2014-02-11 F 
2014-02-11 G 
2014-02-11 H 
2014-02-12 I 
2014-02-12 J 
2014-02-12 K 
2014-02-12 L 
2014-02-13 M 
2014-02-13 N 

Как вернуть совокупный фондовый баланс на каждый день, так что бы вернуть что-то вроде этого:

DATE  Total 
2014-02-10 3 
2014-02-11 8 
2014-02-12 12 
2014-02-13 14 
+0

Почему 2014-02-11 имеет StockCount = 8 вместо 5? Является ли он совокупным (т.е. 5 + все предыдущие дни)? – wdosanjos

+0

@ wdosanjos правильно, как это получить? –

ответ

2

Этот должен работать на вас. Он получает отдельные даты из вашей таблицы, затем подсчитывает количество записей, которые попадают или перед каждой датой.

WITH 
CTE_Dates AS (
    SELECT DISTINCT DATE 
    FROM [TableName] 
) 
SELECT DATES.DATE, 
     COUNT(*) AS Total 
FROM CTE_Dates DATES 
INNER JOIN [TableName] STOCKS 
    ON DATES.DATE >= STOCKS.DATE 
GROUP BY DATES.DATE 
+0

спасибо, что работает! –

2

Если у вас есть SQL 2012 или SQL 2014, вы можете попробовать следующее. Вот SQL Fiddle.

SELECT 
    [DATE], 
    SUM(COUNT(ITEMNAME)) OVER(ORDER BY [DATE] 
           ROWS BETWEEN UNBOUNDED PRECEDING 
           AND CURRENT ROW) AS StockCount 
    FROM MyTable 
    group by [DATE]; 
+0

спасибо, плохо посмотри на него –

+0

Вау, я никогда не знал о фильтре «ROWS» в функциях окна. Спасибо вам за это. –

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