以下两个SQlite3的数据库聚合查询应该怎么写?

请各位帮忙!

表:
商品 日期 姓名 金额
BJ01 20220130 小王 4000
BJ01 20220230 小王 5000
BJ01 20220330 小王 9000
SZ01 20220130 小李 4000
SZ01 20220230 小李 6000
SZ01 20220330 小李 5000
BJ01 20220130 小张 5000
BJ01 20220230 小张 6000
BJ01 20220330 小张 4000
FJ01 20220130 小陈 7500
FJ01 20220230 小陈 8500
FJ01 20220330 小陈 4000
FJ01 20220430 小陈 3500

1,按商品和姓名统计结果:
商品 日期 姓名 最大日期金额 最小日期金额 差额 月数
BJ01 20220130 小王 9000 4000 5000 3
SZ01 20220130 小李 5000 4000 1000 3
BJ01 20220330 小张 4000 5000 -1000 3
FJ01 20220430 小陈 3500 7500 -4000 4
尝试的代码,请更正!
select *,count(商品 || 姓名) as number , max(取最大日期对应的金额) as 最大日期金额,min(取最小日期对应的金额) as 最小日期金额, (max(最大日期金额) - min(最小日期金额)) as 差额
from table WHERE
GROUP BY 商品 || 姓名
order by 差额 DESC

2,按商品统计结果:
商品 日期 最大日期金额 最小日期金额 差额 月数
BJ01 20220130 13000 9000 4000 3
SZ01 20220130 5000 4000 1000 3
FJ01 20220430 3500 7500 -4000 4
尝试的代码,请更正!
select *,count(商品) as number ,小张与小王商品一样合并

结果中的日期,因为有聚合操作group by,所以应该要指明,要的是最大日期还是最小日期,我两个都查了出来

select a.*, b.金额 as 最大日期金额, c.金额 as 最小日期金额, (b.金额 - c.金额) as 差额 from(
  select 商品, max(日期) as 最大日期, min(日期) as 最小日期, 姓名, count(日期) as 月数
  from table 
  group by 商品, 姓名
)a
inner join(
  select * from table
)b on a.商品 = b.商品 and  a.姓名 = b.姓名 and  a.最大日期 = b.日期
inner join(
  select * from table
)c on a.商品 = c.商品 and  a.姓名 = c.姓名 and  a.最小日期 = c.日期
select a.*, b.金额 as 最大日期金额, c.金额 as 最小日期金额, (b.金额 - c.金额) as 差额 from(
  select 商品, max(日期) as 最大日期, min(日期) as 最小日期, count(日期) as 月数
  from table 
  group by 商品
)a
inner join(
  select * from table
)b on a.商品 = b.商品 and  a.最大日期 = b.日期
inner join(
  select * from table
)c on a.商品 = c.商品 and a.最小日期 = c.日期

语句:

SELECT `商品`,MIN(`日期`),`姓名`,
(SELECT `金额` FROM yue_cha b WHERE b.`商品`=a.`商品` and b.`姓名`=a.`姓名` and b.`日期`=MAX(a.`日期`)) as  最大日期金额,
(SELECT `金额` FROM yue_cha b WHERE b.`商品`=a.`商品` and b.`姓名`=a.`姓名` and b.`日期`=min(a.`日期`)) as  最小日期金额,
((SELECT `金额` FROM yue_cha b WHERE b.`商品`=a.`商品` and b.`姓名`=a.`姓名` and b.`日期`=MAX(a.`日期`))-(SELECT `金额` FROM yue_cha b WHERE b.`商品`=a.`商品` and b.`姓名`=a.`姓名` and b.`日期`=min(a.`日期`))) as 差额,
COUNT(`日期`) as 月数 FROM `yue_cha` as a GROUP BY `商品`,`姓名`

结果如下:

img

  1. 需求1
SELECT 
    商品,
    姓名,
    最小金额日期,
    最大日期金额,
    最小日期金额,
    最大日期金额 - 最小日期金额 差额,
    月数
FROM
    (SELECT 
        商品,
            姓名,
            (SELECT 
                    t1.日期
                FROM
                    sql_site t1
                WHERE
                    t1.商品 = t2.商品
                        AND t1.姓名 = t2.姓名
                        AND t1.金额 = MIN(t2.金额)) AS 最小金额日期,
            (SELECT 
                    t1.金额
                FROM
                    sql_site t1
                WHERE
                    t1.商品 = t2.商品
                        AND t1.姓名 = t2.姓名
                        AND t1.日期 = MAX(t2.日期)) AS 最大日期金额,
            (SELECT 
                    t1.金额
                FROM
                    sql_site t1
                WHERE
                    t1.商品 = t2.商品
                        AND t1.姓名 = t2.姓名
                        AND t1.日期 = MIN(t2.日期)) AS 最小日期金额,
            COUNT(DISTINCT 日期) 月数
    FROM
        sql_site t2
    GROUP BY 商品 , 姓名) AS t
ORDER BY 差额 DESC
  1. 需求2
SELECT 
    t3.商品,
    t3.最小金额日期,
    t3.最大日期金额,
    t3.最小日期金额,
    t3.最大日期金额 - t3.最小日期金额 差额,
    t3.月份
FROM
    (SELECT 
        商品,
            (SELECT 
                    t2.日期
                FROM
                    (SELECT 
                    商品, 日期, SUM(金额) 金额
                FROM
                    sql_site
                GROUP BY 商品 , 日期) t2
                WHERE
                    t2.商品 = t1.商品
                        AND t2.金额 = MIN(t1.金额)) 最小金额日期,
            (SELECT 
                    t2.金额
                FROM
                    (SELECT 
                    商品, 日期, SUM(金额) 金额
                FROM
                    sql_site
                GROUP BY 商品 , 日期) t2
                WHERE
                    t2.商品 = t1.商品
                        AND t2.日期 = MAX(t1.日期)) 最大日期金额,
            (SELECT 
                    t2.金额
                FROM
                    (SELECT 
                    商品, 日期, SUM(金额) 金额
                FROM
                    sql_site
                GROUP BY 商品 , 日期) t2
                WHERE
                    t2.商品 = t1.商品
                        AND t2.日期 = MIN(t1.日期)) 最小日期金额,
            COUNT(DISTINCT 日期) AS 月份
    FROM
        (SELECT 
        商品, 日期, SUM(金额) 金额
    FROM
        sql_site
    GROUP BY 商品 , 日期) t1
    GROUP BY 商品) t3
ORDER BY 差额 DESC

完成