我想記錄用戶狀態,然後可以根據我們不斷變化的記錄歷史報告的歷史數據報告。我試圖做到這一點的SQL(使用PostgreSQL),我有記錄,如下面的用戶變化提出的結構。SQL - 狀態機 - 基於變更
CREATE TABLE users (
userid SERIAL NOT NULL PRIMARY KEY,
name VARCHAR(40),
status CHAR NOT NULL
);
CREATE TABLE status_log (
logid SERIAL,
userid INTEGER NOT NULL REFERENCES users(userid),
status CHAR NOT NULL,
logcreated TIMESTAMP
);
這是我提出的基於數據的表結構。
對狀態欄「A」代表活躍用戶,並且「S」表示已暫停的用戶,
INSERT INTO status_log (userid, status, logcreated) VALUES (1, 's', '2008-01-01');
INSERT INTO status_log (userid, status, logcreated) VALUES (1, 'a', '2008-02-01');
所以該用戶已被暫停在1月1日和積極的再次2月1。
如果我想獲得於2008年1月15日客戶的暫停名單,然後用戶標識1應該顯示出來。如果我在2008年2月15日獲得暫停的客戶名單,則不應出現用戶ID 1。
1)這是結構的數據爲這種查詢的最佳方式?
2)如何查詢這個結構或者你提出的修改後的結構中的數據,這樣我就可以簡單地得到一個日期(比如說1月15日),並找到那個日期的活動狀態的客戶列表只有SQL?這是SQL的工作嗎?
是的,它支持分析查詢 - > http://www.postgresql.org/docs/8.4/static/tutorial-window.html – filiprem 2013-11-20 22:36:43