首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有开始值的Order语句在Round中选择

具有开始值的Order语句在Round中选择
EN

Stack Overflow用户
提问于 2014-06-06 16:01:22
回答 3查看 1.6K关注 0票数 2

我在Server中有一个表,其中每一行都是要传递的邮件。每封电子邮件都属于一个域名。

我需要根据日期列选择要发送的第一封电子邮件,但我希望从Round中使用的最后一个域开始按域替换它们

表:

代码语言:javascript
复制
CREATE TABLE Delivery (Date datetime, Domain int);

INSERT INTO Delivery (Date, Domain)
VALUES
    ('2014-01-07 11:24:31', 1),
    ('2014-04-07 13:21:42', 2),
    ('2014-02-07 14:48:58', 3),
    ('2014-03-07 15:58:01', 1),
    ('2014-06-07 15:58:01', 2),
    ('2014-01-07 12:58:01', 3),
    ('2014-01-07 19:58:01', 1) ;

使用此查询,我可以根据需要对它们进行排序,但无法找到用起始值对它们进行排序的方法:

代码语言:javascript
复制
SELECT [Date],[Domain]
FROM (
  SELECT    [Date] ,[Domain],
  ROW_NUMBER() OVER (PARTITION BY [Domain] ORDER BY [Date]) AS recID
  FROM  Delivery ) AS r
ORDER BY    recID, [domain] 

SqlFiddle

我要说的是:

代码语言:javascript
复制
ORDER BY [domain] > @lastuseddomain

类似于mysql字段()函数的东西

我需要使用TOP 1按时间间隔运行这个查询,如果存在的话,预期的结果是获得上一行的最早行>域,或者用domain=1重新启动。

就像域上的循环排序一样

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-06 16:44:01

谢谢你们的努力,但我想我找到了解决办法:

代码语言:javascript
复制
SELECT TOP 1 [Date],[Domain]
FROM (
  SELECT [Date] ,[Domain], 
         ROW_NUMBER() OVER (PARTITION BY [Domain] ORDER BY [Date]) AS recID
  FROM  Delivery ) AS r
ORDER BY recID, 
   (CASE WHEN domain >@LASTUSEDDOMAIN THEN domain
         ELSE domain + (select top 1 domain from delivery order by domain desc) 
    END)
票数 1
EN

Stack Overflow用户

发布于 2014-06-06 16:33:45

你需要使用cte

它允许您使用ROW_NUMBER()作为where条件

代码语言:javascript
复制
with cte as 
(
  SELECT [Date] ,[Domain],
         ROW_NUMBER() OVER (PARTITION BY [Domain] ORDER BY [Date]) AS recID
  FROM  Delivery 
)
select * from cte 
 where recID = 1 
 order by domain
票数 1
EN

Stack Overflow用户

发布于 2014-06-06 16:36:02

编辑-

我完全错了。下面的Blam给了你真正的答案。抱歉!

原始员额:

考虑到任意数量的域(和时间),我恐怕不知道如何在SQL中做到这一点。您将需要结果集中的第N行来设置选择行N+1的条件,而这是无法做到的。在有限的域/时间下,您可能可以使用UNPIVOT查询执行一些操作,但我认为您必须使用由程序生成的动态SQL - SQL,并且知道要处理的数据是什么。

如果这是正确的,那么在获得数据之后,您可能会浪费时间生成一个查询并运行(我看不出这将是一个有效的查询)。相反,将数据放入代码中的可搜索列表中,在代码中获取第一个,然后了解第一个是什么,第二个等等。

听起来像一个讨厌的代码,但正确的可搜索结构可能是有趣的工作。

对不起,我帮不上忙,但我不知道该怎么做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24086144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档