Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 寻找最古老的最近的访问。(最小值按最大值分组) 我试图在列表中找到最老的日期,但我只想考虑每个可能的“人”的最新条目。 即考虑以下数据集(日期为VARCHAR 103,即DD/MM/YYYY) 如果我想为每一个“商店”(即Min(Dead)店组)找到最少的日期,那么我会得到01 / 01 / 2017的商店X和07 / 01 / 2017的Y。然而,在这两次访问中,访问的人后来都到了商店,所以我不想把这些日期看作是“最早的最近”访问的一部分。_Sql_Sql Server - Fatal编程技术网

Sql 寻找最古老的最近的访问。(最小值按最大值分组) 我试图在列表中找到最老的日期,但我只想考虑每个可能的“人”的最新条目。 即考虑以下数据集(日期为VARCHAR 103,即DD/MM/YYYY) 如果我想为每一个“商店”(即Min(Dead)店组)找到最少的日期,那么我会得到01 / 01 / 2017的商店X和07 / 01 / 2017的Y。然而,在这两次访问中,访问的人后来都到了商店,所以我不想把这些日期看作是“最早的最近”访问的一部分。

Sql 寻找最古老的最近的访问。(最小值按最大值分组) 我试图在列表中找到最老的日期,但我只想考虑每个可能的“人”的最新条目。 即考虑以下数据集(日期为VARCHAR 103,即DD/MM/YYYY) 如果我想为每一个“商店”(即Min(Dead)店组)找到最少的日期,那么我会得到01 / 01 / 2017的商店X和07 / 01 / 2017的Y。然而,在这两次访问中,访问的人后来都到了商店,所以我不想把这些日期看作是“最早的最近”访问的一部分。,sql,sql-server,Sql,Sql Server,为了清楚起见,我想知道每个客户最近的访问中,哪一个是最老的。i、 e.有人最后一次光顾商店,但后来没有回来的日期是什么时候 我是否需要通过一个临时表,在该表中按店铺提取最大(日期)组,或者是否有办法直接从该数据集中获取X的2017年1月12日和Y的2017年1月11日 我想要以下结果 +------+------------+ | Shop | Date | +------+------------+ | X | 12/01/2017 | +------+-----------

为了清楚起见,我想知道每个客户最近的访问中,哪一个是最老的。i、 e.有人最后一次光顾商店,但后来没有回来的日期是什么时候

我是否需要通过一个临时表,在该表中按店铺提取最大(日期)组,或者是否有办法直接从该数据集中获取X的2017年1月12日和Y的2017年1月11日

我想要以下结果

+------+------------+
| Shop | Date       |
+------+------------+
| X    | 12/01/2017 |
+------+------------+
| Y    | 11/01/2017 |
+------+------------+

任何帮助都将不胜感激

最简单的方法是使用排名功能:


为什么不将日期存储为
date
/
datetime
,而将日期存储为
varchar

您也可以在选择中尝试选择:

CREATE TABLE #VISIT (Person CHAR(1), Shop CHAR(1), [Date] DATE)

INSERT INTO  #VISIT
SELECT 'A','X','09/01/2017'
UNION ALL SELECT 'A','X','01/12/2017'
UNION ALL SELECT 'A','Y','01/12/2017'
UNION ALL SELECT 'B','X','01/01/2017'
UNION ALL SELECT 'B','X','01/13/2017'
UNION ALL SELECT 'B','Y','01/11/2017'
UNION ALL SELECT 'C','X','01/14/2017'
UNION ALL SELECT 'C','Y','01/18/2017'
UNION ALL SELECT 'C','Y','01/07/2017'

SELECT minDate.Shop
    ,Min(minDate.lastVisit)
FROM (
    SELECT Person
        ,Shop
        ,Max([Date]) lastVisit
    FROM #VISIT
    GROUP BY Person
        ,Shop
    ) AS minDate
GROUP BY minDate.Shop

请添加期望的结果集以进行澄清。因此,您想要最早的访问,但仅来自仅访问过一次的人员?您确实应该开始在日期数据类型中存储日期。这就是它的设计目的。我仍然震惊于有多少人认为这是可以的。这些人永远不会在varchar列中存储整数。Olivier和GuidoG补充道:我想知道构成客户最近一次访问商店的最古老的访问(在所有客户中)是什么。Sean,它存储为日期时间-这只是为了简单。我认为此查询不会返回预期结果。OP希望获得每个店铺日期每个人的最新信息。然后得到最早的每家店铺价值。@Giorgosbetos:也许我没有仔细阅读这个问题。但他表示,他“只想要每个可能的‘人’的最新条目”。然而,他可以很容易地修改它:
按人分区,购物…
你早3分钟就到了!
with cte as
(
   select Person, Shop, [Date],
          rn = ROW_NUMBER() OVER (PARTITION BY Person Order By CONVERT(datetime, t.[Date], 103) DESC)
   fromk dbo.TableName t
)
select Person, Shop, [Date]
from cte
where rn = 1
CREATE TABLE #VISIT (Person CHAR(1), Shop CHAR(1), [Date] DATE)

INSERT INTO  #VISIT
SELECT 'A','X','09/01/2017'
UNION ALL SELECT 'A','X','01/12/2017'
UNION ALL SELECT 'A','Y','01/12/2017'
UNION ALL SELECT 'B','X','01/01/2017'
UNION ALL SELECT 'B','X','01/13/2017'
UNION ALL SELECT 'B','Y','01/11/2017'
UNION ALL SELECT 'C','X','01/14/2017'
UNION ALL SELECT 'C','Y','01/18/2017'
UNION ALL SELECT 'C','Y','01/07/2017'

SELECT minDate.Shop
    ,Min(minDate.lastVisit)
FROM (
    SELECT Person
        ,Shop
        ,Max([Date]) lastVisit
    FROM #VISIT
    GROUP BY Person
        ,Shop
    ) AS minDate
GROUP BY minDate.Shop