2009-10-11 73 views
-3

我想在表幫助與另一個MySQL查詢

ID product_id 
1  abc 
2  abc 
3  cat 
4  dog 
5  dog 
6  man 
7  man 
8  bat 
9  bat 
10  abc 
11  cat 
12  dog 
13  dog 

我想要一個查詢,給了我一個類似的結果從上表中選擇新添加的DISTINCT的product_id的計數 -
狗 - 2
貓-1
ABC -1
蝙蝠-2
人-2

*在此先感謝
*編輯
我有一個表來存儲產品,我一直在這個表中增加新的產品圖像的圖像和我想選擇特定產品的新添加圖像的數量(忽略以前的套在表前面添加圖片)......我希望我已經說清楚了

*編輯我找到了答案,我的問題..

SELECT COUNT(xbrygame_scrnsmkv.id) FROM xbrygame_scrnsmkv 
WHERE xbrygame_scrnsmkv.id >(SELECT MAX(xbrygame_scrnsmkv.id) 
          FROM xbrygame_scrnsmkv 
          WHERE xbrygame_scrnsmkv.product_id= (SELECT DISTINCT xbrygame_scrnsmkv.product_id 
                  FROM xbrygame_scrnsmkv 
                  ORDER BY xbrygame_scrnsmkv.id DESC LIMIT 5,1)) 
    GROUP BY xbrygame_scrnsmkv.product_id 
+0

你的問題不清楚,你如何定義「新增」? – 2009-10-11 09:52:15

+0

你的意思是從最新到最舊,並且在第一次看到一個新的字符串時,看看它跟隨着同一個字符串有多少次? – Zed 2009-10-11 09:54:33

+0

你已經花費足夠的時間在這個網站上,至少嘗試提問全部細節。 – random 2009-10-11 10:00:30

回答

0
SELECT COUNT(xbrygame_scrnsmkv.id) FROM xbrygame_scrnsmkv 
WHERE xbrygame_scrnsmkv.id >(SELECT MAX(xbrygame_scrnsmkv.id) 
          FROM xbrygame_scrnsmkv 
          WHERE xbrygame_scrnsmkv.product_id= (SELECT DISTINCT xbrygame_scrnsmkv.product_id 
                  FROM xbrygame_scrnsmkv 
                  ORDER BY xbrygame_scrnsmkv.id DESC LIMIT 5,1)) 
    GROUP BY xbrygame_scrnsmkv.product_id 
3

你可以重新設計你的表也有一個計數器:

ID product_id consecutive 
8  bat   1 
9  bat   2 
10  abc   1 
11  cat   1 
12  dog   1 
13  dog   2 

當插入表格時,首先檢查最後一個條目及其連續計數器。如果您插入相同的元素,增加計數器,否則插入1.喜歡的東西:

INSERT INTO Table (product_id, consecutive) VALUES 
('newProd', CASE (SELECT product_id FROM Table WHERE ID = MAX(ID)) 
       WHEN 'newProd' THEN 
          (SELECT consecutive FROM Table WHERE ID = MAX(ID)) + 1 
       ELSE 1 
      END); 

然後你就可以讓你的選擇是:

SELECT product_id, consecutive 
FROM Table 
WHERE ID IN 
    (SELECT MAX(ID) 
    FROM Table 
    GROUP BY product_id) 

原來的答覆是:

SELECT Filename, COUNT(Filename) as Count 
FROM Table 
GROUP BY Filename 
+0

我也是一樣的concider,但是如果你看他的數據,他只計算「更高」的ID。 – 2009-10-11 09:53:47

+0

我已編輯帖子,使自己更清晰...請參閱示例表和結果集 – halocursed 2009-10-11 10:08:09

+0

謝謝Zed,但我找到了我的問題的答案,無需更改表... – halocursed 2009-10-11 10:36:09

1

如果您只想要'新增'記錄,您必須以某種方式指示新添加的記錄是什麼。你的dbms可能支持所有記錄默認情況下的約會(我有一個暗示Ingres可能會這樣做,但我可能想象它 - 自從我使用它以來已經有一段時間了),但是你可能需要添加一些東西給排你自己。

你可以添加一個時間字段進行過濾,然後你可以做的Zed做:

SELECT Filename, COUNT(Filename) as Count 
FROM Table 
WHERE DateAdded > (FilterDate) 
GROUP BY Filename 

編輯其中FilterDate是日期時間後,你認爲一個記錄是新的,對例如,你可以將它設置爲現在減去60分鐘 - 語法將根據DBMS而改變)

或者你可以添加一個'新的'標誌位列並將其設置爲每個新記錄爲真,它們在它之後關閉被讀取或某個任意時間間隔。

+0

我有一個date_added字段在表...什麼是filterDate? – halocursed 2009-10-11 10:05:19