SQL - 具有相同日期的记录

时间:2013-09-11 20:44:04

标签: sql

我正在尝试返回同一天发生的记录,但无法弄清楚如何执行此操作。使用下面的脚本,我可以看到有两个具有相同日期的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

3 个答案:

答案 0 :(得分:1)

如果您正在使用SQL Server,可以使用Common Table Expression (CTE)和COUNT函数与OVER clause完成此操作,以便在应用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 上设置了这个例子。

答案 1 :(得分: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

答案 2 :(得分:0)

SQL Fiddle

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

<强> Results

| 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 |
相关问题