2009-10-02 3 views
1

일회성 보고서에 대해이 쿼리를 사용하고 있습니다. 기본적으로 내가하려는 것은 지난 달에 하나의 계정 ID로 2 건 이상의 거래가있는 모든 기록을 찾는 것입니다. 나는 아마 그것이 쉬운 아마 알고있다, 나의 마음은 단지 공백이다.MySql Count Query

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

무엇이 잘못된 쿼리와 당신입니다 잘못된 결과 또는 오류가 발생합니까? –

+0

오류가 발생했습니다. count()를 WHERE 절에 넣을 수는 없지만 HAVING 절의 –

답변

3

나는 거의 다 왔다고 생각한다. 하위 쿼리는 그러나

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

, IDS가 꺼져 거래를 얻을 수 - 수 있어야 뭔가를 같이

  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는이 u 리에 고유 한 간략하지만 니모 닉 이름이고, xyz는 long_named_table을 g 용할 쿼리의 어디에 있든지 사용할 수 있습니다. 예를 들어
:

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

에 필요한 것입니다. 가지고있어! –

+0

별칭에 대해 완전히 이해합니다. 일회성 보고서를 던지기위한 질문이었습니다. 우리가 가지고 있던 문제점을 찾기 위해 한 번 실행하십시오. 일반적으로 쿼리는 많이 달라졌을 것입니다. 하지만 정말 고맙습니다. –