标签: greatest-n-per-group

连接两个表,其中表 A 具有日期值,并且需要在 B 中查找 A 中日期下方的下一个日期

我得到了这张表“A”:

| id | date       |
===================
| 1  | 2010-01-13 |
| 2  | 2011-04-19 |
| 3  | 2011-05-07 |
| .. | ...        |
Run Code Online (Sandbox Code Playgroud)

和这个表“B”:

| date       | value |
======================
| 2009-03-29 | 0.5   |
| 2010-01-30 | 0.55  |
| 2011-08-12 | 0.67  |
Run Code Online (Sandbox Code Playgroud)

现在我正在寻找一种方法来联接这两个表,其中“B”中的“值”列映射到“A”中的日期。对我来说,这里棘手的部分是表“B”仅存储更改日期和新值。现在,当我需要表“A”中的这个值时,SQL 需要回顾它要求该值的日期下一个日期是什么。

所以最后这些表的 JOIN 应该如下所示:

| id | date       | value |
===========================
| 1  | 2010-01-13 | 0.5   |
| 2  | 2011-04-19 | 0.55  |
| 3  | 2011-05-07 …
Run Code Online (Sandbox Code Playgroud)

mysql sql greatest-n-per-group

0
推荐指数
1
解决办法
498
查看次数

SQL - 返回具有 Top 1 的 CTE

我正在尝试返回一组结果,并决定使用 CTE 碰碰运气,第一个表“Vendor”有一个引用列表,第二个表“TVView”有使用来自“的引用创建的票号”供应商”表。可能有一张或多张票证使用相同的票证号码,具体取决于该票证的状态,并且我想返回在“TVView”中找到的每张票证的最后一个条目,该条目与“供应商”中选定的参考相匹配。此外,“TVView”表有一个递增的种子字段。

我得到这个返回正确数量的条目(意味着不显示重复的票证,而只显示一次),但我不知道如何添加一个额外的层来返回并选择该票证的最后一个条目并返回一些其他字段。我可以弄清楚如何求和,这实际上很容易,但我确实需要“TVView”中每个票证条目的前 1 个,无论它是否重复,同时返回“Vendor”的所有引用。如果 SQL 支持“Last”就好了

你是怎样做的?

这是我到目前为止所做的:

with cteTickets as (
    Select s.Mth2, c.Ticket, c.PyRt from Vendor s 
    Inner join 
    TVView c on c.Mth1 = s.Mth1 and c.Vendor = s.Vendor
)
Select Mth2, Ticket, PayRt from cteTickets
Where cteTickets.Vendor >='20'
  and cteTickets.Vendor <='40'
  and cteTickets.Mth2    ='8/15/2014'
Group by cteTickets.Ticket
order by cteTickets.Ticket
Run Code Online (Sandbox Code Playgroud)

sql greatest-n-per-group

0
推荐指数
1
解决办法
4105
查看次数

MYSQL - 按 DESC 顺序按 Id 排序,按 X 分组

在过去的 4 个小时里,我一直专注于这个问题,简而言之,我想按 id 以 DESC 顺序排序该表,按 ads_post_id 分组(基于 id 的 DESC 顺序),LIMIT 为 6行返回。

数据库样本,


id   | ads_post_id
---------------------------------------------------------------------------
22   | 983314845117571
23   | 983314845117571
24   | 983314845117571         
104  | 983314845117571
250  | 983314845117571
253  | 983314845117571 
767  | 983314845117571          
---------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我目前的查询,

SELECT * FROM fb_ads GROUP BY ads_post_id ORDER BY id DESC LIMIT 6
Run Code Online (Sandbox Code Playgroud)

然而,这一切的回报是,


id   | ads_post_id
---------------------------------------------------------------------------
22   | 983314845117571   
---------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

它应该返回,


id    | ads_post_id
---------------------------------------------------------------------------
767   | 983314845117571   
---------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

很明显,它是按 ASC 顺序分组的,然后按 …

mysql greatest-n-per-group

0
推荐指数
1
解决办法
3605
查看次数

MySQL 分组并仅从每个组中选择第一个

我想执行一个查询,仅选择给定组中的最新项目。


在此示例中,我正在跟踪货车:

  • 每次他们返回基地时,check-in都会记录信息 - 里程等......
  • 每次他们送货时,delivery都会记录客户等......

该表让我们了解给定的历史记录van。数据可以通过查询生成或随时存储 - 这不是问题。

 id | checkin_id | delivery_id | van_id
----+------------+-------------+--------
 24 | 15         | NULL        | 3
 25 | NULL       | 28          | 3
 26 | 16         | NULL        | 4
 27 | NULL       | 29          | 3
 28 | NULL       | 30          | 4
 29 | 17         | NULL        | 5
Run Code Online (Sandbox Code Playgroud)

我可以通过使用 - 查询来查看货车的历史记录 ... WHERE van_id=3;

相反,我希望能够获得vans他们最近的“事件”的列表。结果是这样的:

 id | checkin_id …
Run Code Online (Sandbox Code Playgroud)

mysql greatest-n-per-group groupwise-maximum

0
推荐指数
1
解决办法
2万
查看次数

SQL 查询联接将结果限制为每个 ID 一个项目

所以我有 2 张桌子......产品和图片

Products 
---------
id
value1
value2
value3
etc..

Images
---------
id
productId
imageName
Run Code Online (Sandbox Code Playgroud)

图像表每个产品将有多个图像,因此当我运行此查询时:(!= 0 是因为某些图像没有 productId 所以我想排除它们,不确定是否有更好的方法处理那个,或者如果我什至需要包括那个)

select p.*, i.imageName 
from products p, images i 
where p.id = i.productId and i.productId != 0 
Run Code Online (Sandbox Code Playgroud)

我得到了结果,但它给了我多个条目,我只想要每个产品一个结果,我希望它提取第一个添加的图像(所以是最旧的)......

目前的结果是这样的---

id : 1
imagename: name1.jpg

id : 2
imagename: name5.jpg

id: 2
imagename: name6.jpg

id: 2
imagename: name7.jpg

id: 3
imagename:  name3.jpg

etc... etc... 
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样......

id: 1
imagename: name1.jpg

id: 2
imagename: name5.jpg

id: 3
imagename: name 3.jpg
Run Code Online (Sandbox Code Playgroud)

这有意义吗?谁能帮我找出我的问题?

mysql sql join greatest-n-per-group

-1
推荐指数
1
解决办法
8221
查看次数

使用group by为SQL过滤日期时间

我正在尝试制作一个sql,但它无法正常工作.

我有一张这样的桌子:

进入量| 什么电脑有访问| 什么日期和时间

  11                   computer 1             2013-12-30 09:00:00
  2                    computer 2             2013-12-30 10:00:00
  30                   computer 2             2013-12-30 10:11:00
  17                   computer 3             2013-12-30 17:30:00  
  200                  computer 4             2013-12-30 07:00:00
  150                  computer 1             2013-12-30 14:00:00
  19                   computer 1             2013-12-30 06:00:00
Run Code Online (Sandbox Code Playgroud)

我想要做的是一个结果,它只向我显示:在每台计算机中,有多少是最大访问次数和时间?上面的表的结果os SQL将是这样的:

进入量| 什么电脑有访问| 什么日期和时间

  30                   computer 2              2013-12-30 10:11:00
  17                   computer 3              2013-12-30 17:30:00  
  200                  computer 4              2013-12-30 07:00:00
  150                  computer 1              2013-12-30 14:00:00
Run Code Online (Sandbox Code Playgroud)

计算机2在2013-12-30 10:00:00 ........的确切时间内最多可以进行30次访问.

问题是如何在每个结果中显示exacly日期?有人帮忙吗?

谢谢

sql sql-server sql-server-2008 greatest-n-per-group sql-server-2012

-2
推荐指数
1
解决办法
113
查看次数