3

複雑なクエリを作成する必要があり、助けが必要です。以下は私が持っているものの例です:

id   |   Date   |  Validity

48   | 6-1-2009 |  notFound   
47   | 6-1-2009 |  valid   
46   | 6-1-2009 |  valid    
45   | 3-1-2009 |  invalid   
44   | 3-1-2009 |  invalid   
42   | 4-1-2009 |  notFound 
41   | 4-1-2009 |  notFound
48   | 4-1-2009 |  valid 

[ここにSQLがあります。]

そして、クエリ結果は次のようになります。

   Date   |  valid   |  invalid   |    notFound

 3-1-2009 |   0      |     2      |       0
 4-1-2009 |   1      |     2      |       2
 6-1-2009 |   3      |     2      |       3

SQLiteでのみこれを行うことはできますか?誰かが私を助けることができますか?私はPythonで働いています。

それから線グラフを生成するためにこれが必要です。例は次のようになります。折れ線グラフ

4

2 に答える 2

4

私はこれがそれをするべきだと信じています:

SELECT Date,
SUM(Validity = "valid") AS valid,
SUM(Validity = "invalid") AS invalid,
SUM(Validity = "notFound") AS notFound
FROM table_name
GROUP BY Date

SUM関数は、さまざまな妥当性タイプの総数を集計します。'='関数は、falseの場合は0を返し、trueの場合は1を返します。これにより、これが機能します。

** 編集 **

前の日付のデータも含む各日付の全体的な集計を探しているので、これはあなたが望むものではないことに気づきました。これはPythonでかなり簡単に行うことができます。

valid_sum = 0
invalid_sum = 0
notfound_sum = 0
for r in cursor.fetchall():
    date = r[0]
    valid_sum += int(r[1])
    invalid_sum += int(r[2])
    notfound_sum += int(r[3])
    # print aggregate data for this date
于 2012-11-13T01:43:16.073 に答える
1

Date列は最も重要なフィールドである年で始まっていないため、適切に並べ替えることができません。

日付を適切な形式に変更すると仮定すると、次のyyyy-mm-ddようなものを使用できます。

SELECT A.Date,
       (SELECT COUNT(*) FROM MyTable AS B
        WHERE B.Date <= A.Date
          AND B.Validity = 'valid') AS valid,
       (SELECT COUNT(*) FROM MyTable AS B
        WHERE B.Date <= A.Date
          AND B.Validity = 'invalid') AS invalid,
       (SELECT COUNT(*) FROM MyTable AS B
        WHERE B.Date <= A.Date
          AND B.Validity = 'notFound') AS notFound
FROM (SELECT DISTINCT Date FROM MyTable
      ORDER BY Date) AS A
于 2012-11-13T08:13:20.520 に答える