0

SQLリクエストで奇妙な動作が見られます。

私のテーブルpointLog:

# Column Type
1 date timestamp 2 uid varchar(30)
3 ssid varchar(40)
4 reason varchar(50)
5 points int(5) No None

ステートメント:

SELECT date, count(date) as anzahl FROM pointLog WHERE uid = 1 order by date desc 

次の結果を返します

    date                anzahl
2012-09-01 12:21:16     14

しかし、ステートメント:

SELECT date FROM pointLog WHERE uid = 1 order by date desc 

戻り値

2012-09-02 12:44:08

最初の結果として。

だから私の質問2012-09-02:カウントを含む最初のステートメントの最初の結果として受信されないのはなぜですか?

どうもありがとう!

edit anzahlとしてのカウントは、この例で0を超えるエントリがあることを確認するためにのみ使用されます。私はそれがプログラムでテストされるべきであることを知っています。

しかし、私の主な問題は、同じ(日付)で並べ替えたときに2つの異なる日付が表示される理由を説明できないことです。したがって、唯一の違いはカウント属性です。しかし、それは通常、並べ替えを変更するべきではありませんか?

FINAL*ソリューション

SELECT MAX(date) AS maxdate, COUNT(date) AS anzahl FROM pointLog WHERE uid = 1
4

3 に答える 3

1

1つの結果が得られます。それは、任意の日付が前に付いた日付のカウントです。次に、ORDER BYステートメントがそれを順序付けます。これは、出力が1行しかないため、何も実行されません。

于 2012-09-02T12:16:46.210 に答える
0

SQLステートメントにGROUPBYが必要です。そうでない場合、COUNT()は日付ごとに個別の合計を提供しません。

于 2012-09-02T11:19:47.667 に答える
0

@prosfilaesが回答したように、クエリは決定論的な結果を返しませんdate。任意の結果が返されます。

最新の日付とカウントが必要な場合は、次を使用できます。

SELECT 
    MAX(date) AS maxdate, 
    COUNT(date) AS anzahl 
FROM 
    pointLog 
WHERE 
    uid = 1 ;
于 2012-09-02T12:49:51.917 に答える