Как динамически передавать квартальные значения в предложении where по дате в запросе postgresql - PullRequest
0 голосов
/ 11 июня 2019

Я предоставил значение (4-е) внутри предложения where.См. Запрос ниже. Но я хочу предоставить более одного квартального значения внутри предложения «динамически». И квартальные значения будут зависеть от месяца. Когда они будут автоматически меняться, то квартальные значения также будут автоматически изменяться и будут использоваться как условиегде клаус.Итак, как мне предоставить квартальные значения динамически.

(Описание: всего 4 раза в квартал в течение одного года. В квартал = 3 месяца. Так, январь-март - 1-й квартал, апрель-июнь - 2-й квартал, июль-сентябрь - 3-й квартал, а октябрь-декабрь - 4-й кварталТеперь 4 квартал = 12 месяцев или 1 год. Теперь я должен всегда брать 2 квартал. Один квартал будет зависеть от текущего 3 месяца, а другой квартал будет предшествовать 3 месяца. Пример: По кварталу = 3 месяца. Так что текущий квартал будетв течение месяца с апреля по июнь (2-й квартал). и предыдущий квартал будет с января по март (1-й квартал). Таким образом, мы получим квартальные значения столбцов 2-го и 1-го. Теперь мы должны запросить и использовать 2-й и 1-й динамически в качестве кодировкиof where clause.because эти (2-й и 1-й) квартальные значения будут зависеть от месяца. Когда месяц будет автоматически изменен, то также будут автоматически изменены квартальные значения. Затем значения квартальных будут 3-м и 2-м. И тогда эти два квартальных значения будут замененыв предыдущих квартальных значениях внутри, где пункт вquery.thus будет продолжаться.)

$values = DB::table('mnw.monitorevents') ->where('quarterly', '=','4th') ->first();

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Отменен предыдущий ответ на основе обновленного вопроса. Похоже, вы хотите определить текущий и предыдущий квартал на основе текущей даты. Это верно?

Вы можете использовать пакет Carbon, который поставляется с Laravel, чтобы получить эти значения. Вы даже можете получить первые и последние даты за квартал. Сделайте поиск для "четверти" в документах .

<?php
use Carbon\Carbon;

...

$today = \Carbon\Carbon::now();

var_dump([
    $today->copy()->quarter,
    $today->copy()->firstOfQuarter(),
    $today->copy()->lastOfQuarter(),
    $today->copy()->subQuarter(1)->quarter,
    $today->copy()->subQuarter(1)->firstOfQuarter(),
    $today->copy()->subQuarter(1)->lastOfQuarter(),
]);

// Output formatted for readability.
// array (size=6)
//   0 => 2
//   1 => 2019-04-01 00:00:00.328373
//   2 => 2019-06-30 00:00:00.328373
//   3 => 1
//   4 => 2019-01-01 00:00:00.328373
//   5 => 2019-03-31 00:00:00.328373

Затем вы можете использовать номер квартала или даты в своем запросе. Это отвечает на ваш вопрос?

0 голосов
/ 11 июня 2019

Рассчитать значение квартала с текущей даты.

date('n') возвращает номер месяца.Разделите номер месяца на 3 и округлите, чтобы получить квартал, затем вычтите 1, чтобы сделать этот индекс на основе нуля.Затем используйте это в качестве индекса в массиве названий кварталов, которые вы используете в столбце базы данных.

$quarters = ["1st", "2nd", "3rd", "4th"];
$current_quarter_num = ceil(date('n') / 3) - 1;
$current_quarter = $quarters[$current_quarter_num];
$current_values = DB::table('mnw.monitorevents')
 ->where('quarterly', '=',$current_quarter)
 ->where('datestart','=','2018-12-02')
 ->first();
$previous_quarter_num = ($current_quarter_num + 3) % 4;
$previous_quarter = $quarters[$previous_quarter_num];
$previous_values = DB::table('mnw.monitorevents')
 ->where('quarterly', '=',$previous_quarter)
 ->where('datestart','=','2018-12-02')
 ->first();

...