0

我正在尝试返回同一天发生的记录,但不知道如何执行此操作。使用下面的脚本,我可以看到有两个 perf_no 具有相同的日期,我只是不知道如何只返回这两个项目。

select perf_no, perf_name, perf_dt
from LVS_TKT_HIST 
where customer_no=1046359
order by perf_dt desc

11038   2014-05-15 20:00:00.000 Patriotic Pops #1
13950   2014-05-15 20:00:00.000 Wine Tier 3
10927   2014-04-25 20:00:00.000 Pops #4 Fri
10833   2014-04-04 20:00:00.000 Evita #4
11269   2014-03-02 19:00:00.000 Lewis & Pizzarelli
4

3 回答 3

1

SQL小提琴

MS SQL Server 2008 架构设置

CREATE TABLE LVS_TKT_HIST
    ([customer_no] int, [perf_no] int, [perf_dt] datetime, [perf_name] varchar(18))
;

INSERT INTO LVS_TKT_HIST
    ([customer_no], [perf_no], [perf_dt], [perf_name])
VALUES
    (1046359, 11038, '2014-05-15 20:00:00', 'Patriotic Pops #1'),
    (1046359, 13950, '2014-05-15 20:00:00', 'Wine Tier 3'),
    (1046359, 10927, '2014-04-25 20:00:00', 'Pops #4 Fri'),
    (1046359, 10833, '2014-04-04 20:00:00', 'Evita #4'),
    (1046359, 11269, '2014-03-02 19:00:00', 'Lewis & Pizzarelli')
;

查询 1

SELECT lth.perf_no, lth.perf_name, lth.perf_dt
FROM LVS_TKT_HIST lth
INNER JOIN (
    SELECT customer_no, CAST(perf_dt AS DATE) AS perf_dt
    FROM LVS_TKT_HIST
    GROUP BY customer_no, CAST(perf_dt AS DATE)
    HAVING count(*) > 1
) dt ON dt.customer_no = lth.customer_no AND
        CAST(lth.perf_dt AS DATE) = dt.perf_dt
WHERE lth.customer_no=1046359

结果

| PERF_NO |         PERF_NAME |                    PERF_DT |
|---------|-------------------|----------------------------|
|   11038 | Patriotic Pops #1 | May, 15 2014 20:00:00+0000 |
|   13950 |       Wine Tier 3 | May, 15 2014 20:00:00+0000 |
于 2013-09-11T21:09:28.393 回答
1

如果您使用的是 SQL Server,则可以使用公用表表达式 (CTE)和带有OVER 子句的 COUNT 函数在应用 COUNT 函数之前按 perf_dt 列对行集进行分区。

;WITH DATA AS
(
  SELECT perf_no, perf_name, perf_dt, COUNT(*) over (partition BY perf_dt) AS [count]
  FROM LVS_TKT_HIST
  WHERE customer_no=1046359
  GROUP BY perf_no, perf_name, perf_dt
)
SELECT * FROM DATA WHERE [count] > 1 

结果:

PERF_NO   PERF_NAME          PERF_DT                     COUNT
-------   -----------------  --------------------------  -----
11038     Patriotic Pops #1  May, 15 2014 20:00:00+0000  2
13950     Wine Tier 3         May, 15 2014 20:00:00+0000  2

我在SQLFiddle.

于 2013-09-11T21:17:16.827 回答
0

您可能意味着很多事情,但我将使用“返回 SQL Server 中同一日期具有其他记录的所有记录”

像这样:

  select perf_no, perf_name, perf_dt
   from LVS_TKT_HIST 
   where customer_no=1046359
     AND CAST(perf_dt AS DATE) in 
       (SELECT CAST(perf_dt AS DATE)
        FROM LVS_TKT_HIST 
        WHERE customer_no=1046359
        GROUP BY CAST(perf_dt AS DATE)
        HAVING COUNT(*) > 1
       )
   order by perf_dt desc
于 2013-09-11T20:54:21.297 回答