多日期MySQL查询

多日期MySQL查询,mysql,Mysql,我试图根据日期范围(每篇文章的“星”数)为应用程序提取一些活动报告 它有一个包含和帐户id的post表,以及一个将该id绑定到帐户的“附属”表 我知道我能做到: SELECT posts.affid, affiliates.name sum(posts.stars) AS SEPT_2012 from posts JOIN affiliates on posts.affid = affiliates.id WHERE posts.timestamp BETWEEN '2012-09-01' AN

我试图根据日期范围(每篇文章的“星”数)为应用程序提取一些活动报告

它有一个包含和帐户id的post表,以及一个将该id绑定到帐户的“附属”表

我知道我能做到:

SELECT
posts.affid,
affiliates.name
sum(posts.stars) AS SEPT_2012
from posts
JOIN affiliates on posts.affid = affiliates.id
WHERE posts.timestamp BETWEEN '2012-09-01' AND '2012-10-01'
group by affid
这将产生一个结果,该结果包含9月份的会员ID、名称和总“明星”。一个月

但是,我想做一个回溯,获取8月、7月、6月和5月的数字,这些数字将显示在一个查询结果中(因此结果将包括affid、name、SEPT_2012、AUG_2012、JUL_2012……等等)。基本上,我假设,对其他日期范围进行子查询

有什么建议吗?
谢谢你的帮助

您可能希望
按提取分组(从时间戳开始的年\月)
(除了您想做的任何其他事情)。当然,它不会让您获得2012年9月、2012年8月等列,但数据会在那里。

您可能希望
按摘录分组(从时间戳算起的年、月)
(除了您想做的任何其他事情)。当然,它不会让您获得2012年9月、2012年8月等列,但数据会在那里。

虽然您无法动态创建列,但您可以“伪造”它们,并对每个日期范围使用
联合。在每个
UNION
中,为其他日期列选择
0
,为正确的列选择
SUM()

类似的方法应该可以奏效:

SELECT
    posts.affid,
    affiliates.name,
    sum(posts.stars) AS SEPT_2012,
    0 AS AUG_2012,
    0 AS JUL_2012
from
    posts
    JOIN affiliates on posts.affid = affiliates.id
WHERE
    posts.timestamp BETWEEN '2012-09-01' AND '2012-10-01'
group by affid

UNION (
    SELECT
        posts.affid,
        affiliates.name
        0 AS SEPT_2012,
        sum(posts.stars) AS AUG_2012,
        0 AS JUL_2012
    from
        posts
        JOIN affiliates on posts.affid = affiliates.id
    WHERE
        posts.timestamp BETWEEN '2012-08-01' AND '2012-09-01'
    group by affid
)
UNION (
    SELECT
        posts.affid,
        affiliates.name
        0 AS SEPT_2012,
        0 AS AUG_2012,
        sum(posts.stars) AS JUL_2012
    from
        posts
        JOIN affiliates on posts.affid = affiliates.id
    WHERE
        posts.timestamp BETWEEN '2012-07-01' AND '2012-08-01'
    group by affid
)

更新(将每个
粘贴的所有结果合并到一行上)

对于每个注释,您希望将每个
posts.affid
的结果与每列中的所有数据合并在一行上。您可以通过在上面的完整查询周围放置一个外部查询,然后再次使用
groupbyaffid
来实现这一点。这样,每个
affid
和请求的所有列都应该有一行。我已经更新了上面的查询,为每个空列选择
0
,而不是为“nicer”输出选择
null

SELECT affid, name, SEPT_2012, AUG_2012, JUL_2012 FROM (
    ... full query above ...
) AS q
GROUP BY affid
更新

要从所有子查询中获取所有“星”的总和,外部select语句可用于:

  SELECT affid, name, sum(SEPT_2012), sum(AUG_2012), sum(JUL_2012) FROM (
    ... full query above ...
) AS q
GROUP BY affid

虽然您无法动态创建列,但可以“伪造”它们,并对每个日期范围使用
联合。在每个
UNION
中,为其他日期列选择
0
,为正确的列选择
SUM()

类似的方法应该可以奏效:

SELECT
    posts.affid,
    affiliates.name,
    sum(posts.stars) AS SEPT_2012,
    0 AS AUG_2012,
    0 AS JUL_2012
from
    posts
    JOIN affiliates on posts.affid = affiliates.id
WHERE
    posts.timestamp BETWEEN '2012-09-01' AND '2012-10-01'
group by affid

UNION (
    SELECT
        posts.affid,
        affiliates.name
        0 AS SEPT_2012,
        sum(posts.stars) AS AUG_2012,
        0 AS JUL_2012
    from
        posts
        JOIN affiliates on posts.affid = affiliates.id
    WHERE
        posts.timestamp BETWEEN '2012-08-01' AND '2012-09-01'
    group by affid
)
UNION (
    SELECT
        posts.affid,
        affiliates.name
        0 AS SEPT_2012,
        0 AS AUG_2012,
        sum(posts.stars) AS JUL_2012
    from
        posts
        JOIN affiliates on posts.affid = affiliates.id
    WHERE
        posts.timestamp BETWEEN '2012-07-01' AND '2012-08-01'
    group by affid
)

更新(将每个
粘贴的所有结果合并到一行上)

对于每个注释,您希望将每个
posts.affid
的结果与每列中的所有数据合并在一行上。您可以通过在上面的完整查询周围放置一个外部查询,然后再次使用
groupbyaffid
来实现这一点。这样,每个
affid
和请求的所有列都应该有一行。我已经更新了上面的查询,为每个空列选择
0
,而不是为“nicer”输出选择
null

SELECT affid, name, SEPT_2012, AUG_2012, JUL_2012 FROM (
    ... full query above ...
) AS q
GROUP BY affid
更新

要从所有子查询中获取所有“星”的总和,外部select语句可用于:

  SELECT affid, name, sum(SEPT_2012), sum(AUG_2012), sum(JUL_2012) FROM (
    ... full query above ...
) AS q
GROUP BY affid

“假装”对我来说完全没问题。我来试试,我想差不多了。它获取数据,但为每个月的select语句创建不同的行。但是我越来越近了。Thanks@user1714388我已经更新了我的答案,以显示如何将每个
affid
的结果合并到单行中。希望这会给你想要的你想要的大帮助!谢谢我不得不对最初的select语句做另一个小改动:select affid、name、sum(2012年9月)、sum(2012年8月)、sum(2012年7月)FROM。。。这对于防止第一个子查询中的初始“0”成为输出中的最终结果是必要的。谢谢你把我送到正确的方向!“假装”对我来说完全没问题。我来试试,我想差不多了。它获取数据,但为每个月的select语句创建不同的行。但是我越来越近了。Thanks@user1714388我已经更新了我的答案,以显示如何将每个
affid
的结果合并到单行中。希望这会给你想要的你想要的大帮助!谢谢我不得不对最初的select语句做另一个小改动:select affid、name、sum(2012年9月)、sum(2012年8月)、sum(2012年7月)FROM。。。这对于防止第一个子查询中的初始“0”成为输出中的最终结果是必要的。谢谢你把我送到正确的方向!