簡體   English   中英

選擇計數(DISTINCT ..)

[英]SELECT COUNT(DISTINCT ..)

我希望能夠選擇每個DATE的COUNT(DISTINCT個值,然后將它們全部加在一起。這是我的主要計數代碼:

SELECT *,
       COUNT(track.ip) AS tracker
FROM   user,
       track
WHERE  track.user = $user
GROUP  BY $user
ORDER  BY tracker
LIMIT  1 

我的數據庫名稱是datein,以及它輸入完成INSERT的日期和時間的方式。 這是代碼:

      Database column :   datein

      Database insert looks like :    2013-11-8 11:17:23

我相信它看起來應該類似於以下代碼:

SELECT *,
       COUNT(DISTINCT track.user) AS tracker
FROM   user,
       track
WHERE  track.user = $user
       AND track.datein >= NOW() - INTERVAL BEGINNING DAY
GROUP  BY $user
ORDER  BY tracker
LIMIT  1 

它看起來應該類似於上面的代碼,但是應該有一種選擇它的方式。 如何每個日期選擇COUNT個DISTINCT值?

根據您的評論,我想您需要比較數據庫中最早的日期中的datein,如果要這樣做,可以將MIN函數與HAVING子句結合使用

SELECT *,
       COUNT(DISTINCT track.user) AS tracker
FROM   user,
       track
GROUP  BY $user
HAVING track.user = $user
       AND track.datein >= MIN(datein)
ORDER  BY tracker
LIMIT  1 

看起來您想要一個包含兩列的結果集:不重復用戶數,日期。 我無法弄清您的FROM子句,因此我將跳過該部分。

讓我們從包含用戶和日期的結果集開始。

SELECT DISTINCT user, 
                TO_DATE(DATE_FORMAT(track.datein, '%Y-%m-%d')) datein
  FROM whatever
 WHERE whatever
   AND whatever

這將datetime值壓縮為簡單日期,並為我們提供了具有不同行的用戶/日期結果集。

接下來,我們對其進行總結。

SELECT count(*) AS tracker
       datein
  FROM (
    SELECT DISTINCT user, 
                    TO_DATE(DATE_FORMAT(track.datein, '%Y-%m-%d')) datein
      FROM whatever
     WHERE whatever
       AND whatever
  ) AS a
  GROUP BY datein

那應該給您您需要的結果集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM