当前位置: 首页 > 面试题库 >

仅返回最大值小于指定值的行

左丘昕
2023-03-14
问题内容

嗨,这对我来说是个棘手的问题。我有三张桌子。

一个包含手机号码和唯一的ID(tbldealermobiles)

FCS - Mobile number
1234 - 07464648787
1234 - 07565465465
3566 - 07878989989
7899 - 07464646466
7899 - 07565465464
9654 - 07589898998

其中一个包含购买日期,唯一的ID和其他详细信息(历史记录)

FCS - purchase date - purchased
1234 - 22/04/2013 - gloves
1234 - 14/03/2013 - hat
1234 - 01/03/2013 - coat
3566 - 20/04/2013 - gloves
3566 - 19/04/2012 - hat
7899 - 14/03/2013 - shoes
9654 - 24/05/2013 - hat
9654 - 19/04/2013 - shoes

其中一个包含客户类型,唯一ID和其他详细信息。(tblAllDealers)

FCS - Cust type - name
1234 - Virtual - Jim
3566 - Outbound - Jon
7899 - Virtual - Jack
9654 - Outbound - Susan

当我想显示购买了超过30天(如果是“ Outbound”)和购买超过60天(如果是虚拟)的客户时,就会出现问题。

我只想返回Jon和Jack的所有手机号码,因为其他人是从为他们的客户类型指定的日期起购买的。

我正在使用INNER JOIN链接唯一ID(FCS)上的3个表,我正在使用MAX仅返回MAX值小于日期的值,但是我不知道如何添加条件来指定两个不同的日期。

这是我到目前为止的查询-

SELECT *
FROM tbldealermobiles
  INNER JOIN tblhistory ON tbldealermobiles.FCS = tblhistory.FCS
  INNER JOIN tblAllDealers ON tbldealermobiles.FCS = tblAllDealers.FCS
WHERE (tblAllDealers.CustGroup = 'Virtual' AND
       tblhistory.PurchaseDate < date('2013-03-22'))
    OR 
      (tblAllDealers.CustGroup = 'Outbound' AND 
       tblhistory.PurchaseDate < date('2013-04-21')) 
GROUP BY tbldealermobiles.mobilenumber 
HAVING MAX(tblhistory.PurchaseDate) < date('2013-04-21') 
ORDER BY tblhistory.PurchaseDate DESC

问题在于,FCS的购买日期可能总是早于指定的日期,但是我只想返回一个在指定日期之后没有购买日期的手机号码,具体取决于客户组。

在此先感谢您的帮助。

编辑:感谢您格式化我的代码Dukeling。


问题答案:

您想将条件从联接拉到having子句中。联接 查看那些日期之前的记录,因此您不知道之后是否发生任何事情。

SELECT *
FROM tbldealermobiles
  INNER JOIN tblhistory ON tbldealermobiles.FCS = tblhistory.FCS
  INNER JOIN tblAllDealers ON tbldealermobiles.FCS = tblAllDealers.FCS
WHERE tblAllDealers.CustGroup in ('Virtual', 'Outbound')
GROUP BY tbldealermobiles.mobilenumber 
HAVING MAX(tblhistory.PurchaseDate) <
            MAX(case when tblAllDealers.CustGroup = 'Virtual' then date('2013-03-22')
                     when tblAllDealers.CustGroup = 'Outbound' then date('2013-04-21')
                end)
ORDER BY tblhistory.PurchaseDate DESC


 类似资料:
  • 问题内容: 我想在逻辑范围内生成一个随机整数。因此,举例来说,我正在编写一个程序来“掷掷”具有指定边数的骰子。 现在的问题是,它将返回边与零之间的值, 包括 0和0,这是没有意义的,因为大多数骰子从1到6、9等。因此,我如何指定nextInt应该在1和边数之间起作用? 问题答案: 要在 from 和 to (包括)之间生成一个随机的int值(均匀分布),请使用: 以您的情况(1 ..面):

  • 我们想写一个函数,它将二叉树的根作为输入,并使用类PairAns返回该树的最大值和最小值。 我在这个问题的基础案例中遇到了一些问题 我希望答案是正确的,但在所有测试用例中都出现了运行时错误。

  • 本文向大家介绍返回JavaScript中数组的最小值和最大值的函数,包括了返回JavaScript中数组的最小值和最大值的函数的使用技巧和注意事项,需要的朋友参考一下 问题 我们需要编写一个接受一个数组并返回另一个数组的JavaScript函数,该数组的第一个元素应该是输入数组的最小元素,第二个应该是输入数组的最大元素。 示例 以下是代码- 输出结果

  • 问题内容: 这是我的SQL Server表 这似乎很容易做到,但我不知道为什么会被卡住。我只想为每个id选择max(date)和该max(date)处的值。我想忽略相对于每个ID而言不是max(date)的所有其他日期。 这是我希望表格看起来像的样子: 我尝试通过使用max(date)进行分组,但没有进行任何分组。我不确定自己在做什么错。在此先感谢您的帮助! 问题答案: 您可以使用以下内容: 观看

  • 我有这张桌子。 我想选择按id分组的最大日期,并将NULL作为最大值包含在结果中,以获得类似结果。 我找到了一个解决方案,但它不包括NULL作为最大值,该解决方案通过@bluefeet返回特定id在最大日期的值 我还搜索了一个解决方案,看看我们如何在t-sql中选择NULL最大值,所以我通过@Damien_The_Unbeliever找到了这个解决方案如何在MIN或MAX中包含空值? 但我陷入了困

  • 这个问题有多项式解吗?如果有,你能呈现吗?