SQL Query earliest date in a table
Hi
I have a table that has over 500,000,000 rows listed in it. The database was not designed by myself but supplied by a third party company for one of there quality products.
Within this table there are various fields, one of these fields is a date field of when the record was created.
Currently trying to run a deletion job on the table to delete a number of the old rows.
What I am looking for is the best way to get the earliest date from all of the rows, and return this is to a variable, so that I can use the dateadd function to delete any records before the last 30 days.
Due to the size of the table, any query I run takes a while, so my question is what would be the fastest way to get the earliest date?
Regards
Out of 500 million rows, what will be your total number of rows to be deleted?
Calculate as below:
SELECT COUNT(1)
FROM YourTable (NOLOCK)
WHERE dt <= DATEADD(d,-30,@dt);
If this number is huge (Lets say 250 million +) then it is better to:
1. Insert last 30 days rows in a temp table t1
SELECT * into dbo.t1
FROM YourTable (NOLOCK)
WHERE dt > DATEADD(d,-30,@dt);
2. Truncate YourTable
TRUNCATE TABLE YourTable
3. Load last 30 days data from temp table to YourTable:
INSERT INTO YourTable
SELECT *
FROM dbo.t1
4. Validate YourTable and then Drop the temp table:
DROP TABLE dbo.t1
You can go this route, when YourTable is idle (I mean, there should not be any data load going on this table).
If you still wish to go with delete apporach then create a sql agent job with
Uri Dimant's query and execute it on the server.
All the Best!
If this post answers your query, please click "Mark As Answer" or "Vote as Helpful".
Similar Messages
-
Multiple SQL Query as Data Source
I have an SQL Query as Data Source of my Crystal Report. It combine the contents of two tables.
I want to do another SQL query based on the previuos SQL Query.
Can I do this in CR ? How I can reference the new SQL query to the main SQL query ?
Thanks,
GabrielThis is my main Query
SELECT
SBO_001.dbo.JDT1.Account,
sum(SBO_001.dbo.JDT1.SYSDeb - SBO_001.dbo.JDT1.SYSCred) AS Balance_001,
0 as Balance_004
FROM SBO_001.dbo.JDT1
GROUP BY SBO_001.dbo.JDT1.Account
UNION
SELECT
SBO_004.dbo.JDT1.Account,
0 as Balance_001,
sum(SBO_004.dbo.JDT1.SYSDeb - SBO_004.dbo.JDT1.SYSCred) AS Balance_004
FROM SBO_004.dbo.JDT1
GROUP BY SBO_004.dbo.JDT1.Account
This is a result
Account Balance_001 Balance_004
80800005 0 -431.67
80800005 590121.07 0
80800006 -3621028.250 0
88780056 5000.00 0
90731001 0 174780.11
I want to obtain this result
Account Balance_001 Balance_004
80800005 590121.07 -431.67
80800006 -3621028.250 0
88780056 5000.00 0
90731001 0 174780.11
How I Can modify this Query?
Thanks,
Edited by: gablus on Aug 7, 2009 1:43 AM -
How to compare result from sql query with data writen in html input tag?
how to compare result
from sql query with data
writen in html input tag?
I need to compare
user and password in html form
with all user and password in database
how to do this?
or put the resulr from sql query
in array
please help me?Hi dejani
first get the user name and password enter by the user
using
String sUsername=request.getParameter("name of the textfield");
String sPassword=request.getParameter("name of the textfield");
after executeQuery() statement
int exist=0;
while(rs.next())
String sUserId= rs.getString("username");
String sPass_wd= rs.getString("password");
if(sUserId.equals(sUsername) && sPass_wd.equals(sPassword))
exist=1;
if(exist==1)
out.println("user exist");
else
out.println("not exist"); -
Query the data between two tables
Need help for query the data between two tables
Table 1: Time sheet
P.ID P.Name EmpID HoursSpend DateTime
c12234 Test 25 4 06/12/2013
c12234 Test 25 7 06/13/2013
c12234 Test 25 8 06/15/2013
c12234 Test 5 3 06/21/2013
c12234 Test 2 5 07/15/2013
c12234 Test 25 4 07/21/2013
Table 2: cost table
EmpID FromDate ToDate Rate
25 05/01/2013 06/30/2013 250
2 04/01/2013 05/31/2013 150
25 07/01/2013 09/30/2013 300
Output
P.ID P.Name EmpID HoursSpend DateTime Rate Total (HoursSond x Rate)
c12234 Test 25 4 06/12/2013 250 1000 (4*250)
c12234 Test 25 7 06/13/2013 250 1750
c12234 Test 25 8 06/15/2013 250
2000
c12234 Test 25 4 07/21/2013 300
1200
c12234 Test 2 5 07/15/2013 150
750
===========================================
Total 28
6700
============================================
Here EmpID =2 don't have rate in the cost table on july month should be pick from last entry from cost table.Hi Gopal,
According to your description, it seems that the output needn’t include the row when EmpID=2. Because the DateTime for it in Table1 doesn’t included between FromDate column and ToDate column. After testing the issue in my environment, we can refer to the
query like below to achieve your requirement:
SELECT time.*,cost.EmpID,cost.Rate,(time.HoursSpend * cost.Rate)as [Total (HoursSond x Rate)]
FROM [Time sheet] as time
INNER JOIN
[cost table]as cost
ON time.EmpID = cost.EmpID
AND time.DateTime BETWEEN cost.FromDate AND cost.ToDate
If there are any other questions, please feel free to ask.
Thanks,
Katherine Xiong
Katherine Xiong
TechNet Community Support -
Hi, I am using Oracle 10g. I want a query which gives me below output.
Data Setup
========
create table t_date_range (
ID number (2),
start_date date,
end_date date);
insert into t_date_range values (1,to_date('20110101', 'YYYYMMDD'),to_date('20110331', 'YYYYMMDD'));
insert into t_date_range values (2,to_date('20110401', 'YYYYMMDD'),to_date('20110531', 'YYYYMMDD'));
insert into t_date_range values (3,to_date('20110701', 'YYYYMMDD'),to_date('20110731', 'YYYYMMDD'));
insert into t_date_range values (4,to_date('20110901', 'YYYYMMDD'),to_date('20111130', 'YYYYMMDD'));
insert into t_date_range values (5,to_date('20111201', 'YYYYMMDD'),to_date('20111231', 'YYYYMMDD'));
commit;
SQL> select ID, to_char(start_date,'DD-MON-YYYY') START_DATE, to_char(end_date,'DD-MON-YYYY') END_DATE from t_date_range;
ID START_DATE END_DATE
1 01-JAN-2011 31-MAR-2011
2 01-APR-2011 31-MAY-2011
3 01-JUL-2011 31-JUL-2011
4 01-SEP-2011 25-OCT-2011
5 26-OCT-2011 30-NOV-2011
6 01-DEC-2011 31-DEC-2011
6 rows selected.
I want result in this form:
START_DATE END_DATE
01-JAN-2011 31-MAY-2011
01-JUL-2011 31-JUL-2011
01-SEP-2011 31-DEC-2011
Means if there is a difference of exact one day between "start_date of 2nd row" and "end_date of first row" then make a single row as shows in above results set.
Thanks!Hi,
Solomon Yakobson wrote:
Keep in mind, Franks's solution assumes date ranges do not overlap. ...That's true. If rows can overlap, then we might need to use two sub-queries, like you did: one to see if a new group starts with this row, and another to count how many new groups have already started.
The solution you posted assumes a relationship between id and dates. If we add a row like this to the sample data:
insert into t_date_range values (6,to_date('20101201', 'YYYYMMDD'),to_date('20121231', 'YYYYMMDD'));that overlaps all the others, then how would that solution work?
LAG won't work, because no matter how we sort the rows, we can't be sure that overlapping rows will be consecutive.
Here's one way to handle overlapping rows:
WITH got_new_grp AS
SELECT id, start_date, end_date
, CASE
WHEN start_date > 1 + MAX (end_date) OVER ( ORDER BY start_date
, id
ROWS BETWEEN UNBOUNDED PRECEDING
AND 1 PRECEDING
THEN 1
END AS new_grp
FROM t_date_range
, got_grp AS
SELECT start_date, end_date
, COUNT (new_grp) OVER ( ORDER BY start_date
, id
) AS grp
FROM got_new_grp
SELECT MIN (start_date) AS start_date
, MAX (end_date) AS end_date
FROM got_grp
GROUP BY grp
ORDER BY start_date
;This solution uses id (assumed to be unique) just to get a consistent ordering, in case 2 (or more) rows have exactly the same start_date. It does not assume any relationship between ids and either start_date or end_date.
I'm also assuming that start_date<=end_date on each row.
Edited by: Frank Kulash on May 11, 2011 12:54 PM
The above refers to the solution you oriognally posted, which was:
with t1 as (
select id,
start_date,
end_date,
case
when lag(end_date) over(order by id) + 1 >= start_date then 0
else 1
end start_of_group
from t_date_range
t2 as (
select id,
start_date,
end_date,
sum(start_of_group) over(order by id) grp
from t1
select min(start_date) start_date,
max(end_date) end_date
from t2
group by grp
order by grp
; -
SQL Query using DATS data type
Hello people,
I have a table 'TableA' with a column 'xpto' that has DATS data type.
A lot of lines in this table has this field empty.
I have to create a SQL query to select those lines with this field not empty.
Select * from TableA
where xpto is not null
It does not work.... The result is all the lines in the table.
What is wrong?
Thanks!Easiest way to do this is :
constants l_xpto type tableA-xpto value is initial
Select * from TableA
where xpto ne l_xpto.
You can see the NULL/NOT NULL settings for the column through SE11
Utilities -> Database Object -> Display.
I tend to set the "Initial Value" flag when adding columns to tables, which creates the database column as NOT NULL with a default value (whatever SAP considers the initial value for that datatype). I think SAP does this by default, but I've had issues where it hasn't so I do this to ensure consistency
Chris Bain -
T-SQL Query Duplicate dates.
A table is called ‘ImportEvents’ There are currently 50 records in this table. The user has the ability to enter the ‘Import Date’ manually and multiple imports could have happened on the same date. What SQL query would you use to identify
a list of all the dates on which an upload has occured without duplicates?If I want the number of Imported dates that don't have duplicate values how could I aggregate the query ?
In sumo -
50 records say 18 records where created on one date and 32 on 32 different dates how can I retrieve the list of 33 records based on the Imported Date.
DECLARE @ImportEvents TABLE (importDate date)
INSERT INTO @ImportEvents (importDate)
VALUES ('2014-01-01'),('2014-01-01'),('2014-01-01'),('2014-01-01'),('2014-01-01'),('2014-01-01'),('2014-01-01'),('2014-01-01'),('2014-01-01'),
('2014-01-02'),('2014-01-03'),('2014-01-04'),('2014-01-05'),('2014-01-06'),
('2014-01-07'),('2014-01-07'),('2014-01-07'),('2014-01-07'),('2014-01-07'),('2014-01-07'),('2014-01-07'),('2014-01-07'),('2014-01-07')
select importDate
From @ImportEvents
group by importDate
having sum(importDate) = 1
Thanks
Richard -
Report from sql query invalid date condition
Hi, I created a Reports From SQL Query. My sql is like
"select column1, column2
from myschema.tablename
where mydate > :p_date1 and mydate < :p_date2"
I am using portal with turkish and english option. If I pass p_date paramaters 'dd-MON-yyyy' format
(for example p_date1 = 23-MAR-2003 p_date2 = 26-APR-2003) in english mode portlet is return correct result,
in turkish mode 'No Row Returned'. I changed my sql statement with
"select column1, column2
from myschema.tablename
where to_date(mydate,'dd/mm/yyy') > to_date(:p_date1,'dd/mm/yyy') and to_date(mydate) < to_date(:p_date2,'dd/mm/yyyy')"
and I pass p_date parameters 'dd/mm/yyyy' format (for example p_date1 = 23/03/2003 p_date2 = 26/04/2003)
but now turkish and english mode No row returned.
How may I write correct sql statament. My database NLS_DATE_FORMAT=DD/MM/YYYY and NLS_LANGUAGE=TURKISH.
thanks.Hi,
Try this for turkish mode:
Case 1: the 'mydate' column has a kind of a char data type (like char, varchar or varchar2)
and a value like '30/03/2003'
"select column1, column2
from myschema.tablename
where
to_date(mydate,'DD/MM/YYYY') > :p_date1
and
to_date(mydate,'DD/MM/YYYY') < :p_date2"
Case 2: the mydate column has a date type:
"select column1, column2
from myschema.tablename
where
mydate > :p_date1
and
mydate < :p_date2"
In both cases use the following parameter values:
p_date1 = 23/03/2003
p_date2 = 26/04/2003
This should work
Thanks
Peter -
SQL query generating data in SQL management studio but not in CUIC interface
Hello,
I'm working on a UCCE 9.0 system
I created SQL query for a report.
Whenever I run the query inside the SQL management studio, it works and generates data, but when I run it in the CUIC interface it works but generates nothing. As you can see in the below snapshot, it contains 209 records that are not being displayed.
Any help would be greatly apprciatedIs it a custom report ? Can you right click on your Custom Report and click on Edit Views. You need to check whether you have Grid Headers Listed.
Regards,
Senthil -
PL/SQL function body return sql query, no data found problem
Hi all,
we are trying to build a dynamic report based on item selection by user. we are using SQL Query (PL/SQL function body returning SQL query). However when a user change the item and submit the page . The following error appears.
ORA-01403: no data found.
our query is so simple
declare
l_query varchar2(30000) default 'select id from chw';
begin
if(:P11_PARA=1) then
l_query:='select name from chw';
end if;
return l_query;
end;
any quick help please.Hello Mike,
I tried it, the problem still exists.
ORA-01403: no data found
my new code is
declare
l_query varchar2(30000) default 'select id from chw';
begin
if (nvl(TO_NUMBER(:P11_PARA),0) = 1) then
l_query:='select name from chw';
end if;
return (l_query);
end;
note, there is no process in this page.
Edited by: M.Jabr on Oct 14, 2009 6:13 AM -
Problem with a SQL query involving dates
I have a database with each task made by a developer in the company's systems, with 2 fields to determine the duration of the tasks: begin_date and end_date, both Dates. Now I have to make an SQL query returning the total of hours each one worked counting every task, so I'm using something like this (simplifying):
select user_id, sum(end_date - begin_date)
from task
group by user_id
but I get a weird fractional number. How do I do this query?What database are you using? Oracle?
The weird fractional number is probably the difference between the dates in days. If you want it in hours, try multiplying it with 24.
select user_id, sum(end_date - begin_date) * 24
from task
group by user_id -
Setting Default value with SQL Query as Data Model
Hi All,
I am developing report based on SQL query.date set as 'SQL Query'. I have created two params start-date and end-date. I am fetching records from database between these two dates.
I want to populate sysdate as a default values. I do not want to use datatemplate approach i mean using beforeReport trigger.
Thansk,
VaraHi Vara,
To set the default value for one of your parameters to SYSDATE you need to enter:
{$SYSDATE()$}
in the Default Value text box
Is this what you require?
Cheers
Andy -
How to display the SQL query's date parameters to the report
Hi all,
I'd like to take the date parameters that are contained in my query and have them appear on the report and/or have the sysdate appear on the report. Any ideas on how to do this? Thanks!Hi..
To display parameters which are part of SQl Query in the output..
http://blogs.oracle.com/xmlpublisher/2008/07/where_are_the_parameter_values.html
HTH.. -
Error While execting SQL Query : No Data to Read from Sockt.
Hi,
I am getting the Error "No Data To Read from Sockt" While executing SQL Query from PL/SQL Developer and same error i am getting while i trying on Toad and SQL*Plus also.
SQL> select * from v$version;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production Pls suggest !!
Thanks n Regards
RjTry to connect without tnsnames. So try the basic connection from SQLDeveloper.
If it works, you have to verify your tnsnames.ora
Are you th only person to have this connection problem or all users meet this error?
Does this connection worked before, is it a new connection?
What changes occured since the connection is out of service. -
Sql to correct data in a table
---------------I have a table that looks like this:
location measure value
Supply Management Activity Group Peacetime Other 720.625
Supply Management Activity Group Total 3318.843
Supply Management Activity Group Mobil 11.385
Supply Management Activity Group Peacetime Operating 2658.192
-----------------I have to put the data in another table that looks like this, is there a way to do this, Thanks, Doug
location total mobil Peacetime Operating Peacetime Other
Supply Management Activity Group 3318.843 11.385 2658.192 720.625Search the forum for: "Rows to columns", "pivot table", "crosstab" and you will find multiple answers to this age old query.
:p
Maybe you are looking for
-
Default password of SAP * in Solution Manager
I have created a new client in solution manager. I could not login to the client wiht user sap* and PASS as password. Pls help
-
Google playstore no connection and wifi connection is ok
Suddenly the connection to the Google Play Store ist not working but my wifi connection is ok. Any recommendations? Please help me...;-)
-
Math.sin(Math.PI)
It's a circular pre-loader. When I add the "SecondHalf" the preloader doesn't work and gives an error saying the script is causing the flash player to run slowly. How can I fix this? This code is in: _root.first_mc._second_mc previewImage.onLoadProg
-
Getting Started with EJB3 - Import issues
Hello, i have a question, in the following piece of code: package cart.client; import java.util.Iterator; import java.util.List; import javax.ejb.EJB; import cart.ejb.Cart; import cart.util.BookException; public class CartClient { @EJB() private stat
-
I want to install X64 Solaris 10 (instead of Solaris 11 Express). Anyone got an X64 laptop pretty recently and successfully installed and configured Solaris 10? Maybe in the past couple of months? I'd appreciate if you can share your experience. If p