2010-04-07 32 views
5

Tengo una base de datos con permite suponer dos columnas (service_date & invoice_amount). Me gustaría crear una consulta SQL que recupere y agrupe los datos para cada año fiscal (de julio a junio).Consulta SQL para recuperar datos del año financiero agrupados por año

Tengo dos años de datos por lo que son dos años financieros (es decir, 2 resultados).

sé que puedo hacerlo de forma manual mediante la creación de una consulta SQL para agrupar por mes a continuación, ejecutar los datos a través de PHP para crear los datos del año financieros pero preferiría tener una consulta SQL.

Todas las ideas son bienvenidas.

Gracias

Respuesta

17
SELECT 
    CASE WHEN MONTH(service_date)>=7 THEN 
      concat(YEAR(service_date), '-',YEAR(service_date)+1) 
    ELSE concat(YEAR(service_date)-1,'-', YEAR(service_date)) END AS financial_year, 
    SUM(invoice_amount) 
FROM mytable 
GROUP BY financial_year 

que producen o/p, como a continuación

financial_year invoice_amount 
2007-2008  10000.00 
2008-2009  15000.00 
2009-2010  20000.00 
+1

Hey su extraña , ¿cómo sabías que su mesa también se llamaba mytable? Y usaste financial_year con un guión bajo ... – CResults

+0

lo comprobé con mi tabla de muestra. la consulta anterior es solo un ejemplo, no sé cuál es su nombre de tabla. Lo comprobo en mi propio navegador y lo encontré correcto, así que muestro una muestra de/para conocer a alguien lo que obtendrán – Salil

+0

Gracias por su ayuda. Funciona perfectamente. – mlevit

1

Esto funciona para mí en MSSQL .. espero que funcione para usted en MySQL

SELECT 
    CASE WHEN MONTH(service_date)>=7 THEN 
      YEAR(service_date)+1 
    ELSE YEAR(service_date) END AS financial_year, 
    SUM(invoice_amount) 
FROM mytable 
GROUP BY 
    CASE WHEN MONTH(service_date)>=7 THEN 
      YEAR(service_date)+1 
    ELSE YEAR(service_date)