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