获取表中存在的每个日期的第一条和最后一条记录号

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_idto 以及哪个invoice_idfrom。我看不到模式。请澄清。 【参考方案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 查询中获取分组记录的第一条和最后一条记录?

如何使用聚合函数在 MySQL 查询中获取分组记录的第一条和最后一条记录?

mysql中如何查询表的第一条和最后一条记录

如何从访问表中获取选择性记录

如何从 sql 查询中获取第一条和最后一条记录?

在分组结果中选择第一条和最后一条记录 - Oracle 11g