2012-05-14 20 views
0

我正在尝试为我的作业构建一个在线书店。
我想按时间列出最卖出的书籍(上周,上个月,所有时间)。
我写了所有的时间查询,但无法计算上周的查询。
有人可以帮我吗?如何在SQL中查找上周的畅销书籍

下面是表:

TbSoldBooks (saleID, BookID, SaleDate) 

(我搜查,但找不到答案)

更新:这是有史以来最畅销的书籍。

SELECT b.bookID, COUNT(b.bookID) AS All-Time 
FROM TbSoldBooks b 
GROUP BY b.bookID 
+0

你到目前为止试过的查询在哪里? –

+2

我认为你应该花更多的时间在数据库上编写查询来获得SQL的感觉,并且更少的时间在线搜索“答案”。这是一个玩具数据库,SELECT语句不会破坏数据,并且您有很大机会真正学习SQL技能。 –

+0

@ AhmetEmre90:看起来很合理。现在您只需要使用指定相应SaleDate的WHERE查询来修改该查询。 –

回答

1
SELECT top 10 b.bookID, COUNT(b.bookID) 
FROM TbSoldBooks b 
GROUP BY b.bookID 
Where SaleDate >= DateAdd(day, -7, getDate()) -- last week 
Order by 2 desc 

SELECT top 10 b.bookID, COUNT(b.bookID) 
FROM TbSoldBooks b 
GROUP BY b.bookID 
Where SaleDate >= DateAdd(month, -1, getDate()) -- last month 
Order by 2 desc 
+1

我个人建议不要使用序号而不是列名排序:[link](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/ 06 /坏习惯,对开球顺序逐个ordinal.aspx) – Dibstar

1

好了,我不想毁了所有你的家庭作业给你,但你可以通过的BookID和COUNT每本书的销售尝试GROUP

编辑:我看到你对比较日期感到困惑。那么看看DATEADD

+0

折腾'WHERE'子句,这是一个很好的答案 – swasheck