2009-10-02 90 views
1

我有这个查询,我正在为一次性报告工作。基本上我试图做的是找到所有的记录,上个月有一个帐户ID有两个以上的交易。我知道这可能是一件容易的事,我的想法只是空白。MySql计数查询

SELECT streaming_transactions.account_id, 
    streaming_transactions_detail.transactions_description, 
    streaming_transactions_detail.transactions_detail_id, 
    streaming_transactions_detail.transactions_id, 
    streaming_transactions_detail.transactions_detail_amount, 
    streaming_transactions_detail.detail_type, 
    streaming_transactions_detail.products_id, 
    streaming_transactions_detail.products_levels_id, 
    streaming_transactions_detail.subscriptions_id, 
    streaming_transactions_detail.subscriptions_payment_options_id, 
    streaming_transactions_detail.modified 
    FROM streaming_transactions_detail 
INNER JOIN streaming_transactions ON streaming_transactions_detail.transactions_id = streaming_transactions.transactions_id 
WHERE streaming_transactions.charged = 1 
    AND streaming_transactions.timestamp_inserted > '2009-09-01 00:00:00' 
    AND streaming_transactions.account_id IN (
       SELECT account_id 
         FROM streaming_transactions_detail 
         WHERE modified > '2009-09-01 00:00:00' 
         AND count(account_id) > 1) 
AND streaming_transactions_detail.transactions_description LIKE '%Service Subscription%' 
ORDER BY streaming_transactions.account_id DESC 
+0

哪些错误与您的查询,是您得到不正确的结果或错误? – 2009-10-02 15:59:41

+0

我收到一个错误。看起来你不能在WHERE子句中有count(),但是在HAVING子句中 – 2009-10-02 16:08:17

回答

3

我想你几乎就在那里。 子查询,以获得交易IDS是关闭的,但是

  SELECT account_id 
       FROM streaming_transactions_detail 
       WHERE modified > '2009-09-01 00:00:00' 
       AND count(account_id) > 1) 

- 应该是这样的

  SELECT account_id, COUNT(account_id) 
      FROM streaming_transactions_detail 
      WHERE modified > '2009-09-01 00:00:00' 
      GROUP BY account_id 
      HAVING count(account_id) > 1) 



[无关]我会扔在大约风格的未经请求的提示。
通过使用表别名,可以提高查询的可读性。这可以通过选择性地添加“AS xyz”来完成,其中xyz是一些简短但助记符的名称,对于此查询是唯一的,您可以在查询中使用x_name的任何位置使用long_named_table。
例如:

FROM streaming_transactions_detail AS D 

然后

SELECT streaming_transactions.account_id, 
    streaming_transactions_detail.transactions_description, 
    streaming_transactions_detail.transactions_detail_id, 
    ... 

能成为( “streaming_transactions_detail” 任选,即仍然可以工作)

SELECT D.account_id, 
    D.transactions_description, 
    D.transactions_detail_id, 
    ... 
+0

这正是我所需要的。有! – 2009-10-02 16:07:35

+0

我完全理解别名。这是对一次性报告的丢弃查询。只需运行一次即可找到我们遇到的问题。通常情况下,查询看起来会有很大的不同。但我真的很感激它。 – 2009-10-02 16:13:58