2009-10-11 50 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