2016-03-22 16 views
0

私のプロジェクトでは、1つのタスクは、直前の24時間以内に実行されたすべての新しいレポートとジョブの日次レポートを実行することです.. しかし、月曜日の朝、過去3日間のすべてのレポート、例えば以下のコードに類似した金曜日に行われた金曜日や修理などのレポートが表示されます。変数として日を使用して値を選択

私は、2つの日付の間違いを表示し、ユーザは別の機能のために以下のコードを作成したように月曜日の&を選択します。

SELECT `defect_Id`, `job_Id`, `date_On_Task`, `description`, `resolved` 
FROM `job` 
WHERE `date_On_Task` >= '$date1' 
AND `date_On_Task` <= '$date2' 
AND `repair_Team` = '$repair_Team' 
AND `resolved` = 3" 

< 1日*表示されていない場合、私はif文日=月曜日のショー* < 3daysの場合、ネストされたSQL文で使用できるようにしたいと思います。

select文は、たとえば、クリックすると、今日の変数に関する情報を見つけるのに苦労していますCURDATE()は現在の日付を選択しますが、SQLは日付を1日に変換できますか?

答えて

0

アプリケーションから両方の日付ピッカーを取り除くことができます。そのために

あなたはCASEステートメントを使用してWHERE句にあなたのロジックを適用できます。

WHERE 
    CASE WHEN WEEKDAY(CURRENT_DATE) = 0 
     THEN `date_On_Task` = CURRENT_DATE - INTERVAL 3 DAY 
     ELSE `date_On_Task` = CURRENT_DATE - INTERVAL 1 DAY 
    END 

WEEKDAY()機能は月曜日のための0を返し、月曜日に適用するには、次のwhere句が発生します。

WHERE `date_On_Task` = CURRENT_DATE - INTERVAL 3 DAY 

関数が何かを返す場合(火曜日から日曜日を意味する1から6まで)、昨日実行されたジョブを取得します。

特定の日付の降水日は簡単です。このようなの

SELECT `defect_Id`, `job_Id`, `date_On_Task`, `description`, `resolved` 
FROM `job` 
WHERE 
    CASE WHEN WEEKDAY(CURRENT_DATE) = 0 
     THEN `date_On_Task` = CURRENT_DATE - INTERVAL 3 DAY 
     ELSE `date_On_Task` = CURRENT_DATE - INTERVAL 1 DAY 
    END 
    AND `repair_Team` = '$repair_Team' 
    AND `resolved` = 3 
+0

を私のコードはありませんあなたの完全なクエリが見える

<DATE HERE> - INTERVAL <NUMBER HERE> DAY 

:あなたはそのようなDATE_SUB()またはsubstract INTERVALを使用することができますまさにそれ。答えをもう一度読んでください。 'WEEKDAY()'関数は月曜日に '0'を返します。 –

0

種類(?):

WHERE 
    [date_On_Task] BETWEEN 
    CASE 
     WHEN DATENAME(DW, GETDATE()) = 'Monday' THEN CAST(GETDATE() - 3 AS date) 
     WHEN DATENAME(DW, GETDATE()) = 'Sunday' THEN CAST(GETDATE() - 2 AS date) 
     ELSE CAST(GETDATE() - 1 AS date) 
    END 
     AND 
    CAST(GETDATE() AS date) 
+0

これは私が期待しているより多くのものです。週末にマネージャーがイントラネットサイトにアクセスしないと仮定すると、日曜日の声明は必要ありません。 –

+0

はい、どのようにロジックを使いたいかはあなた次第ですが、これは一般的な考え方です。あなたはそれが決して使用されないと確信していたなら、あなたは単に「日曜日」の行を削除することができます。 –

関連する問題