5

私は今日ここから問題を解決するための良い方向性を与えられましたが、私はこの方向性に従おうとして立ち往生しました。

を使用してcount、過去のテーブルからすべての行のを取得したいと思います。を使用してこれらのフィールドにデータを入力すると、の形式になります。30 daysdate fieldnow()Y-m-d h:i:s

  • count今日、昨日、3日前に追加された行が必要です...など
  • 上記を使用して、各月のカウントを取得できると思いますか?
  • 最後にcount、1年、1年前など、月を合計として使用しますか?

クエリで日付を指定せず、クエリが一般的で、今日と比較してカウントを計算することを望んでいました。月や日数が違うことを考えれば、正確にもできるといいなと思っていました。

SQLだけcountを使用してこれを取得するにはどうすればよいですか?次に、結果セットを配列として使用し、これを。で解析できます。PHP

4

5 に答える 5

2

MySQL のDATE_ADDおよびDATE_SUB関数を調べると、探しているものが得られます。

于 2009-03-04T16:42:15.070 に答える
2

データベース構造がどのように見えるかは完全にはわかりませんが、おそらく以下を使用して目的を達成できますGROUP BY

日別に集計するには:

SELECT date(my_date_field) d, count(*) c FROM tbl
GROUP BY d
ORDER BY d

月ごとに集計するには:

SELECT year(my_date_field) y, month(my_date_field) m, count(*) c FROM tbl
GROUP BY y, m
ORDER BY y, m

年ごとに集計するには、上記のサンプルから月のパラメーターを削除するだけです。

limit特定の結果が必要な場合は、d、y、または m で直接WHERE使用できます。現在を基準とした日付を計算するために使用します。my_date_fieldHAVINGDATE_SUB

于 2009-03-04T16:45:37.323 に答える
0

DATEDIFF を調べてください... mysql の正確な構文はわかりませんが、次のようなものになるはずです。

select * from Table WHERE datediff(StartDate, Today) < DaySpan
于 2009-03-04T16:45:04.800 に答える
0

日付、月、年によるグループ化に基づいて、このソリューションを試してください。

-- Testing data
DECLARE @TestTable TABLE(ID INT, AddDate DATETIME)
INSERT INTO @TestTable
SELECT 1, '2009-03-04 14:58:01' UNION
SELECT 1, '2009-05-14 14:58:01' UNION
SELECT 1, '2009-05-14 14:58:02' UNION
SELECT 1, '2009-05-24 14:58:01' UNION
SELECT 1, '2009-05-24 14:58:02' UNION
SELECT 1, '2009-05-24 14:58:03' UNION
SELECT 1, '2009-07-04 14:58:01' UNION
SELECT 1, '2009-09-04 14:58:01' UNION
SELECT 1, '2010-01-04 14:58:01' UNION
SELECT 1, '2010-03-04 14:58:01' UNION
SELECT 1, '2010-03-04 14:58:02'

-- MySQL Answer
-- for each day
SELECT EXTRACT(YEAR_MONTH_DAY, AddDate), COUNT(ID) FROM @TestTable
GROUP BY EXTRACT(YEAR_MONTH_DAY, AddDate)
-- for each month
SELECT EXTRACT(YEAR_MONTH, AddDate), COUNT(ID) FROM @TestTable
GROUP BY EXTRACT(YEAR_MONTH, AddDate)
-- for each year
SELECT EXTRACT(YEAR, AddDate), COUNT(ID) FROM @TestTable
GROUP BY EXTRACT(YEAR, AddDate)

-- SQL Answer
-- for each day
SELECT dateadd(day, datediff(day, 0, AddDate)+0, 0), COUNT(ID) 
FROM @TestTable
GROUP BY dateadd(day, datediff(day, 0, AddDate)+0, 0)
-- for each month
SELECT dateadd(month, datediff(month, 0, AddDate)+0, 0), COUNT(ID) 
FROM @TestTable
GROUP BY dateadd(month, datediff(month, 0, AddDate)+0, 0)
-- for each year
SELECT dateadd(year, datediff(year, 0, AddDate)+0, 0), COUNT(ID) 
FROM @TestTable
GROUP BY dateadd(year, datediff(year, 0, AddDate)+0, 0)
于 2009-03-04T17:04:33.737 に答える