Sqlite 将两个sql查询组合成一个分组

Sqlite 将两个sql查询组合成一个分组,sqlite,Sqlite,下面我有两个问题。现在我怎么能把它们组合在一张桌子上呢?也可以这样: +-------+-----------------+----------------+ | Date | Tickets created | Tickets closed | +-------+-----------------+----------------+ | 10/25 | 50 | 45 | | 10/26 | 40 |

下面我有两个问题。现在我怎么能把它们组合在一张桌子上呢?也可以这样:

+-------+-----------------+----------------+
| Date  | Tickets created | Tickets closed |
+-------+-----------------+----------------+
| 10/25 |              50 |             45 |
| 10/26 |              40 |             40 |
| 10/27 |              30 |             30 |
| 10/28 |              10 |              0 |
+-------+-----------------+----------------+
tickets表如下所示:

+----+----------------------+----------------------+------------------+
| id |      created_at      |      closed_at       | master_ticket_id |
+----+----------------------+----------------------+------------------+
|  1 | 2013-10-12 00:00:00' | 2013-10-12 06:00:00' |                  |
|  2 | 2013-11-11 00:00:00' |                      |                  |
|  3 | 2013-11-12 00:00:00' |                      |                2 |
|  4 | 2013-11-13 10:00:00' | 2013-11-13 12:00:00' |                  |
|  5 | 2013-12-12 00:00:00' | 2013-12-12 07:00:00' |                  |
+----+----------------------+----------------------+------------------+
问题1

选择strftime%m-%d,tickets.created_u2;as'Date', counttickets.created_atas“Tickets created” 从票上 WHERE tickets.created_at>=“2013-10-01 00:00:00” 和门票。创建时间为<'2013-10-31 00:00:00' 和tickets.master\u ticket\u id为空 按strftime%m-%d分组,票证已创建\u于 产生:

+----+---------+ |日期|创建的票证| +----+---------+ | 10/25 | 50 | | 10/26 | 40 | | 10/27 | 30 | +----+---------+ 问题2

选择strftime%m-%d,tickets.closed\u作为“日期”, counttickets.closed_atas“Tickets closed” 从票上 WHERE tickets.closed_在>='2013-10-01 00:00:00' 和门票。截止时间为<'2013-10-31 00:00:00' 和tickets.master\u ticket\u id为空 按strftime%m-%d分组,票证已关闭\u 产生:

+----+--------+ |日期|门票关闭| +----+--------+ | 10/25 | 50 | | 10/26 | 40 | | 10/27 | 30 | +----+--------+
您可以尝试联接表,如:

      SELECT *
      FROM (query1) q1
      LEFT JOIN (query) q2
      ON q1.date = q2.date
但是mySql没有完全连接,结果也不会好。您必须使用组合左+右联接,结果是两个查询的并集

但请尝试以下未经测试的方法:

 SELECT 
     strftime("%m-%d",`date`) AS `date`, 
     SUM(created) `created`, 
     SUM(closed)`closed`
  FROM
  (
     SELECT 
     CASE
         WHEN (tickets.created_at >= '2013-10-01 00:00:00'  and tickets.created_at< '2013-10-31 00:00:00'  and tickets.master_ticket_id is Null )  THEN created_at
         WHEN (tickets.closed_at >= '2013-10-01 00:00:00'  and tickets.closed_at< '2013-10-31 00:00:00' and tickets.master_ticket_id is Null)  THEN closed_at
         END AS `date` ,    
     CASE
         WHEN (tickets.closed_at >= '2013-10-01 00:00:00'  and tickets.closed_at< '2013-10-31 00:00:00' and tickets.master_ticket_id is Null) THEN 1
         ELSE 0
         END AS `closed`,
     CASE
          WHEN (tickets.created_at >= '2013-10-01 00:00:00'  and tickets.created_at< '2013-10-31 00:00:00'  and tickets.master_ticket_id is Null) THEN 1
          ELSE 0
          END AS `created`
     FROM tickets 
 ) AS results
 Group by strftime("%m-%d",`date`)

[由于以前的版本有一些错误而编辑]

似乎要避免一个联盟比我希望的要困难得多,但据我所知,以下几点应该是可行的

SELECT Date, SUM(created) AS 'Tickets created', SUM(closed) AS 'Tickets closed' FROM
(
    SELECT strftime("%m-%d",tickets.created_at) AS 'Date',
    COUNT(tickets.created_at) AS 'created', 
    0 AS 'closed'
    FROM tickets 
    WHERE tickets.created_at >= '2013-10-01 00:00:00' 
    AND tickets.created_at< '2013-10-31 00:00:00'
    AND tickets.master_ticket_id IS NULL
    GROUP BY Date

UNION ALL

    SELECT strftime("%m-%d",tickets.closed_at) AS 'Date',
    0 AS 'created',  
    COUNT(tickets.closed_at) AS 'closed'
    FROM tickets 
    WHERE tickets.closed_at >= '2013-10-01 00:00:00' 
    AND tickets.closed_at< '2013-10-31 00:00:00'
    AND tickets.master_ticket_id IS NULL
    GROUP BY Date
)
GROUP BY Date

这个和我想要的很接近。唯一的问题是,当我将tickets.created_at和tickets.closed_at更改为本月12月的日期时,它仍然显示11月和10月等,尽管创建的tickets为0,关闭的tickets为0。啊,好吧,您可以在where子句中添加一个术语,以仅选择创建日期在特定日期之间的那些。或者可能是我们现在总结的两个术语中的一个或。嗯,我也是这么想的,但是当我在where语句后面添加了一行:AND tickets.created_at>='2013-12-01 00:00:00'和tickets.created_at<'2013-12-30 00:00:00'时,所有tickets.created AND tickets.closedHmm,实际上,如果是已关闭的票证,则日期不应基于创建的时间,对吗。我会仔细考虑一下。我得到了无效的SQL-没有这样的函数:如果Sqllite不支持IF语句??格式是正确的,只是它返回的值与我使用的原始查询相比略有偏差。我会试着看一看原因。我感谢你的帮助!我认为计数可能是关闭的,因为如果在给定的时间间隔内创建和关闭票据,则创建和关闭都将在创建日期计数,而不是在各自的日期计数。不幸的是,您没有提供示例数据和结构,并且不想自己创建它们。。。;我添加了票务表的外观