MySQL her zaman için Min seçin, ancak dönerseniz tarihleri ​​ARASINDA

0 Cevap php

Ben kesinlikle PHP ile sonuçları yineleme bunu, ama birisi daha iyi bir çözüm sonrası bir saniye olsaydı sadece bilmek istedim edebilirsiniz.

Senaryo Ben işlemlerin bir listesi var olmasıdır. Ben iki tarih seçin ve bu iki tarih arasındaki işlemleri almak için bir rapor çalıştırın ... kolay. Olsa raporlama bölümlerden biri için, ben onların ilk işlem ise sadece işlem dönmek gerekiyor.

Ben sorgu ile nerede var burada:

 SELECT *, MIN(bb_transactions.trans_tran_date) AS temp_first_time 
 FROM 
   bb_business      
   RIGHT JOIN bb_transactions ON bb_transactions.trans_store_id = bb_business.store_id 
   LEFT JOIN bb_member ON bb_member.member_id = bb_transactions.trans_member_id 
 WHERE 
   bb_transactions.trans_tran_date BETWEEN '2010-08-01' AND '2010-09-13' 
   AND bb_business.id = '5651' 
 GROUP BY bb_member.member_id 
 ORDER BY bb_member.member_id DESC

Bu bana MIN seçilen tarihler arasındaki işlemlerin verir. Ne gerçekten ihtiyacınız olan genel MIN bu iki tarih arasında düşerse. Bu mantıklı mı?

Ben temelde bir müşteri raporlama döneminde ilk defa satın olmadığını bilmek gerekir.

Her neyse, ben PHP ile çözmek gibi hiçbir büyük acele. Çoğunlukla kendi merak ve öğrenme için.

Bilgiyi yaymak için teşekkürler!

EDIT: I had to edit the query because I had left one of my trial-errors in there. I had also tried to use the temporary column created from MIN as the selector between the two dates. That returned an error.

SOLUTION: Here is the revised query after help from you guys:

SELECT * FROM (
  SELECT 
    bb_member.member_id, 
    MIN(bb_transactions.trans_tran_date) AS first_time
  FROM 
    bb_business 
    RIGHT JOIN bb_transactions ON bb_transactions.trans_store_id = bb_business.store_id 
    LEFT JOIN bb_member ON bb_member.member_id = bb_transactions.trans_member_id 
  WHERE bb_business.id = '5651' 
  GROUP BY bb_member.member_id
) AS T 
WHERE T.first_time BETWEEN '2010-08-01' AND '2010-09-13'

0 Cevap