我有下表的照片,他们的时间和月份:
TIME|MONTH|PHOTO
----|-----|-----
x1 | mx1 | p1
x2 | mx2 | p2
...
我希望将所有月份排在后代,但总照片数量一直持续到那个月 - 而不仅仅是该月份的数量。
例如,以下查询不够好,因为它返回每个特定月份组的计数,而不是该组之前的总计数:
select MONTH, count(TIME) from PHOTOS group by MONTH sort by MONTH desc
想法?
答案 0 :(得分:2)
与其他RDBMS相比,SQLite的功能较少,但我认为这是你应该这样做的:
SELECT photosA.month,
(SELECT COUNT(time) AS PhotoCounter
FROM photos AS photosB
WHERE photosB.month <= photosA.month) AS total_photos
FROM photos AS photosA
GROUP BY photosA.month
侨!
答案 1 :(得分:1)
select a.month, count(b.month) as CountSmaller
from [PHOTOS] a
inner join [PHOTOS] b on b.[MONTH] <= a.[MONTH]
group by a.time, a.month, a.photo
order by 2 desc
在sqlfiddle中测试
答案 2 :(得分:0)
小提琴http://sqlfiddle.com/#!7/812ac/2/0
要解决您的问题,首先需要某种月份订单。您可以通过此查询执行此操作:
select 1 id, 'mx1' m
union
select 2, 'mx2'
union
select 3, 'mx3'
union
select 4, 'mx4'
您可以通过嵌套查询在每个查询中执行此操作,也可以创建单独的表。 并且操纵嵌套查询,聚合函数和连接可以通过以下方式实现目标:
select m2,
(
select count(*) from photos p
inner join
(
select 1 id, 'mx1' month
union
select 2, 'mx2'
union
select 3, 'mx3'
union
select 4, 'mx4'
) m
on p.month = m.month and m.id <= M.id2
)
from
(
select 1 id2, 'mx1' m2
union
select 2, 'mx2'
union
select 3, 'mx3'
union
select 4, 'mx4'
) M
如果您有任何问题,我可以在评论中回答。