2017-01-30 9 views
0
CREATE TABLE reminders` ( 
    id int(11) NOT NULL AUTO_INCREMENT, 
    url varchar(250) DEFAULT NULL, 
    type int(11) DEFAULT NULL, 
    actiondate datetime DEFAULT NULL, 
    PRIMARY KEY (id), UNIQUE KEY id_UNIQUE (id)) ENGINE=InnoDB AUTO_INCREMENT=186 DEFAULT CHARSET=latin1; 

私のチームのすべてのタスクを一覧表示するmysqlテーブルがあります。各行にはタイムスタンプ列があります。これは私が今日はmysqlテーブルの過去と未来の行を照会する

とデートに対してチェックしたいデータが含まれている列がある

2017-12-06 00:00:00 
2017-12-06 00:00:00 
2017-03-06 00:00:00 
2017-12-06 00:00:00 
2017-06-04 00:00:00 

:私は

actiondateは、フォームの値が含まれている過去の日付を持っているタスクの数をカウントします

use =< CURDATE() 

と1つのクエリで将来の日数を持つタスクの数。

use > CURDATE() 

MySQLのCASE関数はそれと私を助けることができるかもしれないが、それは今のところ期待される結果を動作させるために管理していないと思われるいくつかの研究を行います。

ありがとうございました。

答えて

1

今それを試してみてください。

select 
    curdate() as 'Current date', 
    sum(if(actiondate <= curdate(), 1, 0)) as tasks_before, 
    sum(if(actiondate > curdate(), 1, 0)) as tasks_after 
from 
    reminders; 

結果は次のとおりです。私はここにrextester例を設定した

Current date   tasks_before tasks_after 
------------------- ------------ ----------- 
31.01.2017 00:00:00  6    4 

http://rextester.com/WXNU86748

+0

魅力的な作品です。私の無知を許しなさい。どうもありがとう。 –

+0

@dimtharsようこそ、あなたのスキーマを質問に追加したので、コメントを削除することができます。 – McNets

0

あなたは、それでもため、ケースを使用することができますより簡単なクエリでは、ブール式を使用して、過去の行に対して1/trueを、将来の行に対して0/falseを生成し、その値でグループ化することができます。

select (`use` =< current_date()) as in_future, 
    count(*) 
from your_table 
group by in_future 
+0

あなたのコードは動作しますが、結果が同じ列で取得されるため、結果が使用するのがより複雑になります。好ましい解決策は、異なる列名を有する1つの行のデータを得ることである。 –

関連する問題