2016-07-16 12 views
2

データの開始日と終了日は、たとえば、 2016-07-10としてstart_date、2016-07-25としてend_date。私はZERO値と共に2つのフィールドを追加することによって、これらの2つの日付間のすべてのレコードが欲しいですが、私はテーブルに存在しない日付レコードを取得していません。日付レコードが2つの日付範囲で一致しない場合は0を出力します。

SQLフィドル:http://sqlfiddle.com/#!9/c8dab/9

のDDL:

CREATE TABLE `bugs` (`bug_id` int(11) NOT NULL, `bug_date` date NOT NULL, `cf1` int(11) NOT NULL, `cf2` int(11) NOT NULL, `bug_status` varchar(200) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO `bugs` (`bug_id`, `bug_date`, `cf1`, `cf2`, `bug_status`) VALUES (101, '2016-07-19', 3, 2, 'RESOLVED'), (102, '2016-07-19', 2, 1, 'VERIFIED'), (103, '2016-07-19', 2, 1, 'VERIFIED'), (103, '2016-07-19', 2, 1, 'VERIFIED'), (1363, '2016-07-19', 2, 1, 'VERIFIED'), (1352, '2016-07-19', 2, 1, 'VERIFIED'), (102, '2016-07-19', 2, 1, 'VERIFIED'), (102, '2016-07-22', 2, 2, 'CLOSED'), (103, '2016-07-22', 2, 2, 'CLOSED'), (103, '2016-07-22', 2, 2, 'CLOSED'), (102, '2016-07-19', 3, 2, 'NEW'), (102, '2016-07-19', 2, 1, 'REOPENED'), (102, '2016-07-19', 2, 1, 'CLOSED'), (102, '2016-07-19', 2, 1, 'VERIFIED'), (1363, '2016-07-19', 2, 1, 'VERIFIED'), (1352, '2016-07-19', 2, 1, 'VERIFIED'), (565, '2016-07-19', 2, 1, 'VERIFIED'), (398, '2016-07-22', 2, 2, 'CLOSED'), (565, '2016-07-22', 2, 2, 'CLOSED'), (9872, '2016-07-22', 2, 2, 'CLOSED'); 

問合せ:

SELECT DATE_FORMAT(convert_tz(bugs.bug_date,@@session.time_zone,'+05:30'), '%Y-%m-%d') as date, SUM(bugs.cf1 + bugs.cf2) as count FROM bugs 

'2016年7月10日' AND「2016年7月25日BETWEEN(bugs.bug_date ') GROUP BY bugs.bug_date;

実際の出力:

date  | count 
2016-07-19 | 46 
2016-07-22 | 24 

予想される出力:

date  | count 
2016-07-10 | 0 
2016-07-11 | 0 
2016-07-12 | 0 
2016-07-13 | 0 
2016-07-14 | 0 
2016-07-15 | 0 
2016-07-16 | 0 
2016-07-17 | 0 
2016-07-18 | 0 
2016-07-19 | 46 
2016-07-20 | 0 
2016-07-21 | 0 
2016-07-22 | 24 
2016-07-23 | 0 
2016-07-24 | 0 
2016-07-25 | 0 

私は、関連記事のカップルを経ていますが、私は非常に特定のためにそれを掲示するので、同様のソリューションをしようとすることで本当の答えが届きません誰かが私を示唆することができたら問題になる。

FYI ..いくつかの記事で提案されているような新しいテーブルを作成することはできません.DBアクセスは私のためだけに読まれます。

私のお手伝いをしてください、感謝しています。

+0

編集ボタンがあります。一般に、データ表示の問題は、プレゼンテーションレイヤー/アプリケーションレベルのコードで最もよく処理されます。 – Strawberry

+0

私は日付のヘルパーテーブルを作成します。しかし、あなたが言うようにあなたはできません。 – Drew

答えて

1

私はこれを実際に(中間層)、クエリ出力を取得してから達成しました。 - >日付に合わせたクエリデータを配列に追加します。

for ($i=0; $i <= $noOfDays; $i++) { 
    $date = date('Y-m-d', strtotime($startDate . ' +' . $i . ' day')); 
    //this will add one day in startdate and add logic for $somevalue accordingly 
    $rows[] = array($date, $somevalue); 
} 
関連する問題