按年和月排序

时间:2019-11-14 18:51:31

标签: sql sql-server

我正在尝试从具有YYYY-MM-DD的日期列中按年和月排序。

下面是我的代码示例:

SELECT * FROM (
    SELECT CONCAT(YEAR([DATE]), '-', MONTH([DATE])) AS 'YM' FROM randomTable WHERE [DATE] IS NOT NULL
)sub1
GROUP BY sub1.YM
ORDER BY SUB1.YM asc

这不太奏效,但是已经接近了,我知道了

2017-11 2018-10 2018-11 2018-12 2018-3 2018-4 2018-5 2018-6 2018-8 2018-9 2019-1 2019-10 2019-11 2019-2 2019-3 2019-4 2019-5 2019-6 2019-7 2019-8 2019-9

问题是2019-10 2019-112018-10 2018-11 2018-12。我怎样才能使这项工作正确排序?

3 个答案:

答案 0 :(得分:0)

如何保留[DATE]并将其用于排序?

SELECT sub1.YM
FROM (SELECT CONCAT(YEAR([DATE]), '-', MONTH([DATE])) AS YM, [DATE]
      FROM randomTable
      WHERE [DATE] IS NOT NULL
     ) sub1
GROUP BY sub1.YM
ORDER BY MIN([DATE]);

答案 1 :(得分:0)

这是因为YM是文本,并且字母“ 2019-10”在“ 2019-2”之前。

但这很容易解决。

SELECT sub1.YM 
FROM (
    SELECT FORMAT([DATE],'yyyy-MM') AS [YM]
    FROM randomTable 
    WHERE [DATE] IS NOT NULL
) sub1
GROUP BY sub1.YM
ORDER BY sub1.YM asc

然后是'2019-02'之后的'2019-10'

顺便说一句,此查询可以缩短。

SELECT FORMAT([DATE],'yyyy-MM') AS [YM]
FROM randomTable
WHERE [DATE] IS NOT NULL
GROUP BY FORMAT([DATE],'yyyy-MM')
ORDER BY [YM]

答案 2 :(得分:0)

这是您要找的东西:

public function store(ComprobanteIngresoFormRequest $request, $copropietario_id){
  $ingresos= new ComprobanteIngreso;

  $ingresos->cliente_id=$request->get('cliente_id');
  $ingresos->copropietario_id=$request->get('copropietario_id');
  $ingresos->fecha=$request->get('fecha');
  $ingresos->formapago=$request->get('formapago');
  $ingresos->monto=$request->get('monto');
  $ingresos->fondos=$request->get('fondos');
  $ingresos->nulo=$request->get('nulo');
  $ingresos->descripcion=$request->get('descripcion');
  $ingresos->cheque=$request->get('cheque');
  $ingresos->banco=$request->get('banco');
  $ingresos->deuda=$request->get('deuda');

  $ingresos->save();

  $morosos= Morosos::findOrFail($copropietario_id);
  $morosos->montopago = $request->get('monto');
  $morosos->totalmoroso = $request->get('deuda');

  $morosos->save();

  return Redirect::to('admin/ingresos');
}