SQL View, чтобы показать интервал 12 месяцев и по годам - PullRequest
1 голос
/ 21 января 2012

Прямо сейчас один из других программистов написал это представление, чтобы показать интервал в 6 месяцев. Как мне написать это так, чтобы он показывал интервал в 12 месяцев, сгруппированный по месяцам, но только за 2011 год

Я хотел бы скопировать его для отдельного представления за 12 месяцев, сгруппированного по месяцам, но только за 2012 год

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` 
SQL SECURITY DEFINER VIEW `vw_dash_bymonth`AS
select 
  month(from_unixtime(`tbl_services`.`datetime`)) AS` month1`,
  date_format(from_unixtime(`tbl_services`.`datetime`),'%Y') AS` year1`,
  date_format(from_unixtime(`tbl_services`.`datetime`),'%d') AS `day1`,
 `tbl_services`.`datetime` AS `realdate`,sum(`tbl_services`.`gallons`) AS `gallons`,
 count(0) AS `service`,
 round(avg(`tbl_services`.`gallons`),1) AS `average`
from `tbl_services`
where (from_unixtime(`tbl_services`.`datetime`) > (now() - interval 6 month))
group by month(from_unixtime(`tbl_services`.`datetime`))

Ответы [ 3 ]

2 голосов
/ 22 января 2012

Если вы посмотрите на пункт where

where (from_unixtime(`tbl_services`.`datetime`) > (now() - interval 6 month))

Я полагаю, что это получает даты из всего, начиная с 6 месяцев назад до сегодняшнего дня.Если вы хотите 12 месяцев в 2011 году, я думаю, вы могли бы заменить эту строку на что-то вроде:

where (from_unixtime(`tbl_services`.`datetime`) >= DATE('2011-01-01 00:00:00')) 
  AND (from_unixtime(`tbl_services`.`datetime`) < DATE('2012-01-01 00:00:00'))

Хотя я не знаю MySQL (только SQLServer), поэтому, если это не сработает, надеюсь, кто-то другой сможетскажи мне, где я ошибся.


Это можно упростить до:

where (from_unixtime(`tbl_services`.`datetime`) >= '2011-01-01') 
  AND (from_unixtime(`tbl_services`.`datetime`) < '2012-01-01')
1 голос
/ 01 декабря 2012
SELECT DISTINCT FROM_UNIXTIME('date','%m-%Y') AS month,
COUNT(`id`) AS count
FROM 'blog'
GROUP BY month
ORDER BY month DESC LIMIT 0,12
0 голосов
/ 22 января 2012
SELECT
    MONTH( UNIX_TIMESTAMP( t.`datetime`) ) AS month1,
    DATE_FORMAT( UNIX_TIMESTAMP( t.`datetime`), '%Y' ) AS year1,
    DATE_FORMAT( UNIX_TIMESTAMP( t.`datetime`), '%d') AS day1,
    t.`datetime` AS realdate,
    SUM(t.gallons) AS gallons,
    COUNT(*) AS `service`,
    ROUND( AVG( t.gallons ), 1 ) AS `average`
FROM 
      tbl_services AS t
  CROSS JOIN
      ( SELECT 2011 AS YearToCheck
      ) AS c
WHERE t.`datetime` >= UNIX_TIMESTAMP( MAKEDATE( YearToCheck, 1 ) )
  AND t.`datetime` < UNIX_TIMESTAMP( MAKEDATE( YearToCheck+1, 1 ) )
GROUP BY MONTH( FROM_UNIXTIME( t.`datetime` ) )
...