0

テーブルがあるとします

           pages_urls
+----+---------+---------------+
| id | site_id | download_date |
+----+---------+---------------+
|  1 |       1 | 2012-01-01    |
|  2 |       1 | 2012-12-31    |
|  3 |       2 | 2012-01-01    |
|  4 |       2 | 2012-12-31    |
+----+---------+---------------+

選択したいすべてのsite_idについて:

  1. 最終ダウンロード日
  2. このサイトのテーブル内のレコード数

私はこのクエリを試しました:

SELECT
    pages_urls.site_id,
    max_table.download_date,
    COUNT(*)
FROM
    pages_urls
LEFT JOIN
(
SELECT
    site_id,
    MAX(download_date) AS download_date
FROM
    pages_urls AS max_pages_urls
WHERE
    max_pages_urls.site_id=site_id
) AS max_table
ON
    pages_urls.site_id=max_table.site_id
GROUP BY
    site_id;

しかし、私は望ましい結果の代わりにこれを得ました:

            desired result           ║            my query result         
+---------+---------------+----------║---------+---------------+----------+
| site_id | download_date | COUNT(*) ║ site_id | download_date | COUNT(*) |
+---------+---------------+----------║---------+---------------+----------+
|       1 | 2012-12-31    |        2 ║       1 | 2012-12-31    |        2 |
|       2 | 2012-12-31    |        2 ║       2 | NULL          |        2 |
+---------+---------------+----------║---------+---------------+----------+
                                     ║

テーブルとクエリをいじる

必要な情報をどのように入手できますか?

4

1 に答える 1

3
SELECT site_id, MAX(download_date) AS download_date, count(*)
FROM pages_urls
GROUP BY site_id;

SQLFiddle デモ

于 2013-06-01T23:47:39.697 に答える