【问题标题】:SQL query Find all product which has increased value at certain 2 datesSQL查询查找在某些2日期增加值的所有产品
【发布时间】:2019-02-11 06:48:14
【问题描述】:

我想知道我是否可以使用 SQL 查询来做到这一点。 我有一个名为“数据”的表格,其中包含产品名称、日期和销售编号。

我的桌子是这样的:

Product         date       Sale

apple           1/1/2019   5
apple           2/1/2019   4
apple           3/1/2019   3
apple           4/1/2019   2
apple           5/1/2019   1
orange          1/1/2019   1
orange          2/1/2019   2
orange          3/1/2019   3
orange          4/1/2019   4
orange          5/1/2019   5
pear            1/1/2019   6
pear            2/1/2019   4
pear            3/1/2019   3
pear            4/1/2019   2
pear            5/1/2019   5
strawberry      1/1/2019   6
strawberry      2/1/2019   3 
strawberry      3/1/2019   7  
strawberry      4/1/2019   4
strawberry      5/1/2019   2

我想设置一个 SQL 查询来查找在某些 2 个日期销售数量增加的产品。

例如查找 2019 年 3 月 1 日销售数量大于 2019 年 1 月 1 日的所有产品 它应该返回橙色和草莓。

我是编程世界的新手,我很感激任何帮助。 提前致谢!

【问题讨论】:

  • 这不是一个免费的编码网站。请先分享您的努力,然后社区将帮助您解决特定问题。
  • 您使用的是哪个数据库服务器?
  • 我对sql不熟悉。但我最好的尝试是从数据中选择产品日期,日期 = xxxx 或日期 = xxxx。它提供了一个表格,但我不知道之后如何进行比较。
  • 没关系。让我知道您使用的是哪个数据库服务器? (甲骨文、SQL Server、MySQL?)
  • 我用 MySQL....

标签: mysql sql compare


【解决方案1】:

您可以尝试使用相关子查询

DEMO

select name,sdate,amount from data a where exists 
  (
   select 1 from data b where a.name=b.name and b.sdate in ('1/1/2019','3/1/2019') and b.amount>a.amount
   and a.sdate<b.sdate
  ) 
and a.sdate in ('1/1/2019','3/1/2019')

OUTPUT:

name        sdate               amount
orange      01/01/2019 00:00:00   1
strawberry  01/01/2019 00:00:00   6

【讨论】:

  • 感谢您的回答。我不太明白什么是 t1 a 和 t1 b。我将检查相关的子查询并研究一下您建议的代码。
  • 在什么意义上一个日期比另一个日期大(我的生日明显例外)?
【解决方案2】:
DECLARE @FasatDate Date ='3-1-2019'
DECLARE @SecondDate Date ='1-1-2019'

SELECT T1.Product,T1.[date] FasatDate,T1.Sale FasatDateSale,T2.[date] SecondDate,T2.Sale SecondDateSale FROM (
SELECT * FROM DATA AS [DA]
WHERE [DA].[date]=@FasatDate) T1

INNER JOIN  (
SELECT * FROM DATA AS [DA]
WHERE [DA].[date]=@SecondDate)T2
on
t1.Product = t2.Product AND t1.Sale>t2.Sale

【讨论】:

    【解决方案3】:

    您可以以JOIN 的身份执行此操作,但我建议:

    select t1.*, t2.sales
    from t t1 join
         t t2
         on t2.product = t1.product and
            t2.sales > t1.sales
    where t1.date = '1/1/2019'
          t2.date = '3/1/2019';
    

    注意:您应该对日期常量使用标准日期格式——'2019-01-03''2019-03-01' 取决于您的意思。

    您也可以使用聚合来做到这一点:

    select product
    from t
    where t.date in ('1/1/2019', '3/1/2019')
    group by product
    having (sum(case when t.date = '1/1/2019' then sales end) <
            sum(case when t.date = '3/1/2019' then sales end)
           );
    

    【讨论】:

      猜你喜欢
      • 2020-08-26
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 2022-06-22
      相关资源
      最近更新 更多