【问题标题】: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。我看不到模式。请澄清。

标签: mysql sql select group-by max


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      相关资源
      最近更新 更多