1

クエリに問題があるので、2つのテーブルがあります。ジョブとジョブの回答です。したがって、すべてのジョブの回答の数を取得するには、次のようにします。

and ((month(a.created_at) = 10 and day(a.created_at) >= 1) 
      or (month(a.created_at) between 11 and 12) 
      or (month(a.created_at) between 1 and 8) 
      or (month(a.created_at) = 9 and day (a.created_at) <= 30))

今、私はもう1つの変更を行う必要があります。これは、毎年、2つの日付(毎年9月1日から12月30日まで)の間に新しい数の仕事の回答を取得することです[フィールド:created_at]、

     +----------+-------+---------+------+----- +
     | year     | job title | number of answers |
     +----------+-------+---------+------+------+
     | 2008     | Job1      | 58                | 
     | 2010     | Job2      | 45                | 
     | 2012     | Job3      | 122               |
     +----------+-------+---------+------+------

年と日付はcreated_atフィールドにあります。

編集 :

01/10から30/9まで私はします:

  and ( (month(a.created_at) = 10 and day(a.created_at) >= 1) 
        or month(a.created_at)   between 11 and 12 
        or month(a.created_at) between 1 and 8 
        or (month(a.created_at) = 9 and day (a.created_at) <= 30))

編集2:

 delimiter $$
begin

declare @StartDay INT, @EndDay INT, @StartMonth INT, @EndMonth INT
Select @StartDay = 01, @StartMonth = 10, @EndDay = 30, @EndMonth = 09

Select year(a.created_at) as years , jd.JobDomain, count(a.Id) as nb_answer,   a.Job_id,   j.JobTitle 
 from JobAppliance a
 inner join Job j on a.Job_id =  j.PublicId
 inner join JobDestination d on j.Id=d.Job_id
 inner join Jjobdomain jd on  j.Id = jd.Job_id

 and 
(
@StartMonth = @EndMonth And 
Month(a.created_at) = @StartMonth And 
Day(a.created_at) >= @StartDay And 
Day(a.created_at) <= @EndDay
) Or (
@StartMonth != @EndMonth And (
(
 Month(a.created_at) = @StartMonth And
  Day(a.created_at) >= @StartDay
) Or (
  Month(a.created_at) Between @StartMonth + 1 And @EndMonth - 1
) Or (
  Month(a.created_at) = @EndMonth And
  Day(a.created_at) <= @EndDay
)
)
)

group by year(a.created_at) , a.Job_id, j.JobTitle;

end$$
delimiter ;

宣言に構文エラーがありますか?

4

1 に答える 1

2

これはあなたが望むものを与えるはずです:

select year(a.created_at) , count(a.Id) as nb_answer, a.Job_id, j.JobTitle 
from JobAnswer a
inner join Job j on a.Job_id =  j.job_id
where month(a.created_at) between 9 and 11 Or (
  month(a.created_at) = 12 and
  day(a.created_at) = 1
)
group by year(a.created_at), a.Job_id, j.JobTitle;

新しく指定された日付範囲に更新

より一般的な解決策は、対象の範囲を定義し、代わりにそれに結合するためのstart_date、end_dateを持つテーブルを持つことです。

これは、1年以内の連続した日付範囲でより一般的に機能する可能性がありますが、私はテストしていません。アイデアは、あなたが望む@StartDayなどの値を記入することです

Declare @StartDay int, @EndDay int, @StartMonth int, @EndMonth int
Select @StartDay = 30, @StartMonth = 9, @EndDay = 1, @EndMonth = 12

Select Year(a.created_at), j.JobTitle, count(a.Id) as nb_answer 
from JobAnswer a
inner join Job j on a.Job_id =  j.job_id
where (
  @StartMonth = @EndMonth And 
  Month(a.created_at) = @StartMonth And 
  Day(a.created_at) >= @StartDay And 
  Day(a.created_at) <= @EndDay
) Or (
  @StartMonth != @EndMonth And (
    (
  Month(a.created_at) = @StartMonth And
      Day(a.created_at) >= @StartDay
    ) Or (
      Month(a.created_at) Between @StartMonth + 1 And @EndMonth - 1
    ) Or (
      Month(a.created_at) = @EndMonth And
      Day(a.created_at) <= @EndDay
    )
  )
)
Group By Year(a.created_at), j.JobTitle;
于 2012-10-22T14:21:42.650 に答える