获取表中存在的每个日期的第一条和最后一条记录号
Posted
技术标签:
【中文标题】获取表中存在的每个日期的第一条和最后一条记录号【英文标题】:Get first and last record number in every date exists in table 【发布时间】:2016-04-05 21:19:04 【问题描述】:我正在尝试显示每一天的发票,因此为此我在创建日期使用 group by 并在小计上使用 sum。我就是这样做的:
SELECT
`main_table`.*,
SUM(subtotal) AS `total_sales`
FROM
`sales_invoice` AS `main_table`
GROUP BY
DATE_FORMAT(created_at, "%m-%y")
它的工作,但我也想得到发票 # from 和 Invoice # to 每个日期。是否可以通过单个查询来完成?
编辑:
表结构:
------------------------------------------------
| id | inoice_no | created_at | subtotal
| 1 | 34 | 2015-03-17 05:55:27 | 5
| 2 | 35 | 2015-03-17 12:35:00 | 7
| 3 | 36 | 2015-03-20 01:40:00 | 3
| 4 | 37 | 2015-03-20 07:05:13 | 6
| 5 | 38 | 2015-03-20 10:25:23 | 1
| 6 | 39 | 2015-03-24 12:00:00 | 6
------------------------------------------------
输出
---------------------------------------------------------------
| id | inoice_no | created_at | subtotal | total_sales
| 2 | 35 | 2015-03-17 12:35:00 | 7 | 12
| 5 | 38 | 2015-03-20 10:25:23 | 1 | 10
| 6 | 39 | 2015-03-24 12:00:00 | 6 | 6
-----------------------------------------------------------------
我的期望
---------------------------------------------------------------
| id | inoice_no | created_at | subtotal | total_sales | in_from | in_to
| 2 | 35 | 2015-03-17 12:35:00 | 7 | 12 | 34 | 35
| 5 | 38 | 2015-03-20 10:25:23 | 1 | 10 | 36 | 38
| 6 | 39 | 2015-03-24 12:00:00 | 6 | 6 | 39 | 39
-----------------------------------------------------------------
【问题讨论】:
向我们展示表结构。也是样本输出。 另外,如果您可以使用sqlfiddle 重新创建表,那么提出查询会更容易。 您如何确定哪个invoice_id
是to
以及哪个invoice_id
是from
。我看不到模式。请澄清。
【参考方案1】:
如果您的发票编号是 INTEGER,那么下面的查询将为您提供您想要的结果:
SELECT DATE_FORMAT(A.created_at, "%m-%y") AS InvoiceDate,
MIN(A.invoiveNo) AS FromInvoiceNo,
MAX(A.invoiveNo) AS ToInvoiceNo,
SUM(A.subtotal) AS total_sales
FROM sales_invoice AS A
GROUP BY InvoiceDate;
【讨论】:
【参考方案2】:我猜salesid 是sales_invoice 表中的primaryid。
select * from(
SELECT
`main_table`.*,
SUM(subtotal) AS `total_sales`
FROM
`sales_invoice` AS `main_table`
GROUP BY
DATE_FORMAT(created_at, "%m-%y")
order by main_table.salesid limit 1
union all
SELECT
`main_table`.*,
SUM(subtotal) AS `total_sales`
FROM
`sales_invoice` AS `main_table`
GROUP BY
DATE_FORMAT(created_at, "%m-%y")
order by main_table.salesid desc limit 1
)a
【讨论】:
以上是关于获取表中存在的每个日期的第一条和最后一条记录号的主要内容,如果未能解决你的问题,请参考以下文章
如何使用聚合函数在 MySQL 查询中获取分组记录的第一条和最后一条记录?