2009-07-16 56 views
1

说你已经有了一个数据库这样的:有没有更好的方式来获取旧数据?

books 
----- 
id 
name 

你想要得到的书籍总数在数据库中,最简单的可能的SQL:

"select count(id) from books" 

但现在你想图书总数上个月 ...

编辑:但有些书已经 从TA删除自上月竹叶提取

很明显嘛,你不能总一个月多数民众赞成在已经过去 - 的“本本”表始终是当前和一些记录已被删除

我的方法是运行一个cron作业(或计划任务)在月底,并将其存储在另一个名为report_data的表中,但这看起来很笨重。任何更好的想法?

+1

您无法更改表格模式以包含'日期'列吗? – 2009-07-16 01:16:04

+0

您上个月的书籍总数是多少?上个月增加了吗? – 2009-07-16 01:16:24

回答

3

查询添加default column具有价值GETDATE(),称之为“DateAdded”。然后,您可以在任意两个日期之间查询,以了解该日期期间有多少本书,或者您可以指定一个日期以查明在某个日期之前(一直到历史记录)有多少本书。

根据注释:你不应该删除,你应该soft delete

+0

不应该删除,你说?我们正在这里靠近。顺便说一句,我通常会删除时,它的东西这样简单 – dittonamed 2009-07-16 01:46:13

0

做你想做什么的唯一方法是将列添加到books表“DATE_ADDED”。然后,你可以运行像

select count(id) from books where date_added <= '06/30/2009'; 
+0

我应该提到可以从表格中删除书籍。对不起,发送一些你错误的轨迹 – dittonamed 2009-07-16 23:30:29

1

我同意JP,做一个软删除/逻辑删除。对于每个查询一个额外的AND语句,它使所有事情变得更容易。另外,你永远不会丢失数据。

当然,如果极端的尺寸成为一个问题,那么是的,你可能不得不开始移动身体/删除行。

1

我的方法是在月底运行一个cron作业(或计划任务),并将其存储在另一个名为report_data的表中,但这看起来很笨重。

我已经使用这个方法来收集和存储的历史数据。这是不是一个软删除的解决方案简单,因为:

  • 的“report_data”表是很容易从
  • 生成报表/图表你不必实施任何需要特殊的软删除代码删除一本书
  • 您不必添加“和积极= 1”,每次从书本表

选择查询的末尾因为做历史报告的代码是从孤立的一切其他人使用书籍,这实际上是不太笨拙的解决方案。

1

如果您需要上个月的数据,那么您不应该删除旧数据。相反,你可以有一个“逻辑删除”。

我会添加一个状态字段和一些日期到表中。

books 
_____ 
id 
bookname 
date_added 
date_deleted 
status (active/deleted) 

从那里,你将能够查询:

SELECT count(id) FROM books WHERE date_added <= '06/30/2009' AND status = 'active' 

注:我不是最好的模式,但你的想法...;)

1

如果改变表的模式是太多的工作,我会添加触发器来跟踪更改。使用这种方法,您可以跟踪所有类型的东西,如添加日期,删除日期等。

1

看着你的问题和不愿改变架构和代码,我建议你去计算书的想法在每个月底结束并将该月的计数存储在另一个表中。您可以使用数据库调度程序来调用SP来执行此操作。

1

你刚刚走了一段历史数据库或数据仓库的宝贝。

数据仓库通常存储有关事物格式的数据,以便稍后将数据添加到当前数据而不是替换当前数据。有关数据仓库的知识很多。如果你认真对待这条道路,我会推荐一本由Ralph Kimball或Bill Inmon撰写的书。我更喜欢Kimball。

这里的网站:http://www.ralphkimball.com/

http://www.inmoncif.com/home/

如果,另一方面,你的第一步,这个领土你计划采取的唯一步骤,你提出的解决方案是不够好。

相关问题